算法之路(一)

🖊作者 : D. Star.
📘专栏 :算法小能手
😆今日分享 : 如何学习?
在学习的过程中,不仅要知道如何学习,还要知道避免学习的陷阱。1. 睡眠不足;2. 被动学习和重读;3. 强调标记或画线,仅仅是强调标记或画下大段课本内容并不会让你的头脑记住任何东西;4. 偷看问题的答案并且认为自己已经理解了;5. 填鸭式学习;6. 忽视书本,只做习题;7. 分心;8. 不去弄清楚你没理解的知识点;9. 惰性学习,只是学习简单的知识。避开这 9 个陷阱,同时破解掉陷阱,你就会找到学习的方法,提高你的成绩。在学习的过程中,不仅要知道如何学习,还要知道避免学习的陷阱。
在这里插入图片描述

文章目录

  • 1. 力扣的283题--移动零
    • ✔解题思路
    • ✔具体代码如下:
    • ✔总结
  • 2. 力扣的1089题--复写零
    • ✔解题思路:
    • ✔具体代码如下:
    • ✔总结:
  • 3. 力扣的11题--盛最多水的容器
    • ✔ 解题思路:
    • ✔具体代码如下:
    • ✔总结:
  • 4. 力扣611题-- 有效三角形的个数
    • ✔解题思路:
    • ✔具体代码如下:
    • ✔总结:
  • 5.力扣15题--三数之和
    • ✔解题思路:
    • ✔具体代码如下:
    • ✔总结:
  • 6. 力扣18题--四数之和
    • ✔解题思路:
    • ✔具体代码如下:
    • ✔总结:
    • 感谢家人的阅读,不准确的地方 欢迎在评论区指正!

1. 力扣的283题–移动零

做题链接:力扣的283题

✔解题思路

在这里插入图片描述

✔具体代码如下:

    public void moveZeroes(int[] nums) {int cur = 0;//指向当前遍历位置--”0“段的下一个int dest = 0;//指向非”0“段的末端while(cur<nums.length){if(nums[cur] == 0){cur++;}else{//交换dest+1和curint tmp = nums[cur];nums[cur] = nums[dest];nums[dest] = tmp;dest++;cur++;}}}

✔总结

2. 力扣的1089题–复写零

做题链接:力扣的1089题

✔解题思路:

在这里插入图片描述
在这里插入图片描述

✔具体代码如下:

public static void duplicateZeros(int[] arr) {//首先找到最后一个需要复写的位置int cur = 0;//当前访问的位置int dest = -1;//复写后的长度int n = arr.length;while (cur < n) {if (arr[cur] == 0) dest += 2;else dest++;//先别急着移动cur,判断一下dest的位置关系if (dest >= n - 1) break;cur++;}//处理一下边界i情况if (dest == n) {arr[n - 1] = 0;cur--;dest -= 2;}//从后往前复写while (cur >= 0) {if (arr[cur] == 0) {arr[dest--] = 0;arr[dest--] = 0;cur--;} else {arr[dest--] = arr[cur--];}}}

✔总结:

这题自己写的时候有点复杂,但是当知道用快慢指针的时候,瞬间恍然大悟,感叹数学和代码结合的每秒!!!

3. 力扣的11题–盛最多水的容器

做题链接:力扣的11题

✔ 解题思路:

✔具体代码如下:

//解法一:暴力枚举--超时
//解法二:根据单调性,利用双指针--最优解public static  int maxArea1(int[] height) {//两个指针:左指针,右指针int left = 0;int right = height.length-1;int vMax = 0;//最大体积int lon = 0;//最短高度while (left < right) {//比较左右指针 指向的数组高度 哪一个最短,取最短的if(height[right] >= height[left]){lon = height[left];}else lon = height[right];//先计算一次体积,移动一个指针,比较最大体积int v = (right - left)*lon;//移动最短的指针if(height[right] >= height[left]){left++;}else right--;//比较最大体积if(v > vMax) vMax = v;}return vMax;}//代码优化public static  int maxArea(int[] height) {//两个指针:左指针,右指针int left = 0;int right = height.length-1;int vMax = 0;//最大体积while (left < right) {//比较左右指针指向的数组高度 哪一个最短,取最短的--用数学函数//先计算一次体积,比较最大体积int v = (right - left)*Math.min(height[right],height[left]);vMax = Math.max(v,vMax);//移动一个指针,移动最短的指针。if(height[right] >= height[left]){left++;}else right--;}return vMax;}

✔总结:

这中题型第一次见,刚做的时候被吓住了,想着该怎么解,感觉高度最大,宽度最大,肯定就是最大体积,但是宽度和高度是没有办法取最大值的,总会有一个是小一点的,那如何求最大的体积?可以说是毫无思路,看见解题思路,发现方法很巧妙!

4. 力扣611题-- 有效三角形的个数

做题链接:力扣611题

✔解题思路:

  1. 先排序,利用单调性,固定最大的数字
  2. 再从右边快速找出三元组
    在这里插入图片描述

✔具体代码如下:

    public int triangleNumber(int[] nums) {int len = nums.length;int left = 0;int c = len-1;int right = c-1;int count = 0;//先对nums进行排序Arrays.sort(nums);//当c<2时,停止循环判断while (c>=2){//当left>=right时,停止循环判断while (left < right) {int sum = nums[left]+nums[right];//当a+b>c时,说明a到b之间的数字和b相加都大于c//直接相减计算总数即可。//当a+b<=c时,就要移动left,判断有没有a+b>c的,但是left必须<rightif(sum > nums[c]){count += right-left;right--;}else if(sum <= nums[c]){left++;}}//当c的所有情况考虑完之后,就要向前移动c,继续判断。// 但是c不能<2,因为要保持包括c前面至少有三个数字。c--;right = c-1;left = 0;}return count;}

✔总结:

刚开始想到的就是暴力枚举,用三个for循环,但是工作量太大O(n3),时间太长。上述的解法很巧妙O(n2)!!!充分利用了单调性的特征。

5.力扣15题–三数之和

做题链接:力扣15题

✔解题思路:

在这里插入图片描述

✔具体代码如下:

    public static List<List<Integer>> threeSum(int[] nums) {//1. 排序Arrays.sort(nums);//创建一个二位数组List<List<Integer>> lists = new ArrayList<>();int n = nums.length;//2. 利用双指针算法for (int i = 0; i < n; ) {//相当于aif (nums[i] > 0) break;int left = i + 1, right = n - 1, tar = -nums[i];while (left < right) {int sum = nums[left] + nums[right];if (tar > sum) left++;else if (tar < sum) right--;else {lists.add(new ArrayList<Integer>(Arrays.asList(nums[i], nums[left], nums[right])));right--;left++;//3. 去重// 将移动后数字与移动前数字进行比较while (left < right && nums[left] == nums[left - 1]) left++;while (right < n - 1 && left < right && nums[right] == nums[right + 1]) right--;}}i++;//4. 去重while (i < n && nums[i] == nums[i - 1]) i++;}return lists;}

✔总结:

这个题目很考验思维能力和代码能力。我们需要考虑到对数组去重+数组不漏+考虑越界问题。

6. 力扣18题–四数之和

做题链接:力扣18题

✔解题思路:

在这里插入图片描述

✔具体代码如下:

    public static List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> lists = new ArrayList<>();Arrays.sort(nums);if (nums[0] > 0 && target < 0 || nums[nums.length - 1] < 0 && target > 0) return lists;for (int i = 0; i < nums.length; ) {for (int j = i + 1; j < nums.length; ) {int c = j + 1, d = nums.length - 1;long  t = (long)target - nums[i] - nums[j];System.out.println(t);//对c,d区间进行查找,去重while (c < d) {if (nums[c] + nums[d] < t) c++;else if (nums[c] + nums[d] > t) d--;else {lists.add(Arrays.asList(nums[i], nums[j], nums[c], nums[d]));c++;d--;while (c < d && nums[c] == nums[c - 1]) c++;while (c < d && nums[d] == nums[d + 1]) d--;}}//对[j]进行去重j++;while (j < nums.length && nums[j] == nums[j - 1]) j++;}//对[i]进行去重i++;while (i < nums.length && nums[i] == nums[i - 1]) i++;}return lists;}

✔总结:

long t = (long) target - nums[i] - nums[j];这里有个细节问题–我知道加减法的时候可能会越界,要用long型,但是我忘记后面也要强制转型了。我没有注意,导致我总是不知道我错哪里了,哭死我了!!!


感谢家人的阅读,不准确的地方 欢迎在评论区指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/184887.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机的甲醛检测器设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、设计的主要内容二、系统硬件设计三、软件设计4.1 程序结构流程图原理图 四、结论五、 文章目录 概要 本文将要提…

【k8s】pod控制器

一、pod控制器及其功用 Pod是kubernetes的最小管理单元&#xff0c;在kubernetes中&#xff0c;按照Pod的创建方式可以将其分为两类 自主式Pod&#xff1a; kubernetes直接创建出来的Pod&#xff0c;这种Pod删除后就没有了&#xff0c;也不会重建 控制器创建的Pod&#xff1a…

2023.11.7 Spring 依赖注入的三大方式

目录 前言 属性注入&#xff08;Autowired&#xff09; Setter 注入 构造方法注入 Resource Autowired 和 Resource 的区别 Autowired 和 Resource 查找 Bean 对象的区别 前言 配置文件 ​ <?xml version"1.0" encoding"UTF-8"?> <beans …

uniapp在不需要后端数据的情况下 怎么记录用户进一次记录一次

目录 前言&#xff1a; html部分 js部分 完整代码 前言&#xff1a; 一时兴起&#xff0c;不喜勿喷&#xff0c;今天听到了这个问题想到了一个方法&#xff0c;解决方式如下。 html部分 他用于显示访问次数&#xff08;visitCount变量的值&#xff09;。 <template&…

MySQL主从搭建,实现读写分离(基于docker)

一 主从配置原理 mysql主从配置的流程大体如图&#xff1a; 1&#xff09;master会将变动记录到二进制日志里面&#xff1b; 2&#xff09;master有一个I/O线程将二进制日志发送到slave; 3) slave有一个I/O线程把master发送的二进制写入到relay日志里面&#xff1b; 4&#xf…

万字长文 - Python 日志记录器logging 百科全书 之 基础配置

万字长文 - Python 日志记录器logging 百科全书 之 基础配置 前言 在日常的开发中工作中&#xff0c;日志记录扮演着不可或缺的角色。它不仅能让我们了解应用程序的运行状况&#xff0c;还能帮助我们定位并解决各种问题。 最基本的&#xff0c;它记录了应用程序的运行情况&am…

SBCFormer:快速、轻量级神经网络 for 边缘AI

一&#xff1a; SBCFormer [ PDF] SBCFormer 是一种 CNN-ViT 轻量混合网络backbone&#xff0c;能在单板计算机上能以每秒 1 帧速度进行全尺寸 ImageNet 分类的轻量级网络。 通过在低端 CPU 上实现高准确性和快速计算&#xff0c;为树莓派 4 型号 B 的 ARM-Cortex A72 CPU 提供…

情感分析与LLMs角色扮演

深度学习自然语言处理 原创作者&#xff1a;wkk 就像人类在做一件事情的时候&#xff0c;可能需要尝试多次。LLM也是如此&#xff01;这对于情感分析任务尤其如此&#xff0c;在情感分析任务中&#xff0c;LLM需要深入推理来处理输入中的复杂语言现象&#xff08;例如&#xff…

「Qt Widget中文示例指南」如何模拟一个时钟?

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 点击获取Qt Widget组…

康耐视深度学习ViDi-ViDi四大工具之一蓝色定位工具/Locate

目录 工具介绍使用步骤说明调整工具ROI添加特征标签生成定位姿态训练并审核模型编辑器参数说明蓝色定位工具/Locate工具 工具介绍 蓝色定位工具用于识别和定位图像中的特定特征或特征组。该工具的输出可用于为其他ViDi 工具提供位置数据。使用该工具时,您提供图像训练集,然后…

Apache Doris (五十二): Doris Join类型 - Broadcast Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Broadcast Join原理

Vue+OpenLayers 创建地图并显示鼠标所在经纬度

1、效果 2、创建地图 本文用的是高德地图 页面 <div class"map" id"map"></div><div id"mouse-position" class"position_coordinate"></div>初始化地图 var gaodeLayer new TileLayer({title: "高德地…

python数据分析及可视化(十五)数据分析可视化实战篇(抖音用户数据分析、二手房数据分析)

python数据分析的实战篇&#xff0c;围绕实例的数据展开分析&#xff0c;通过数据操作案例来了解数据分析中的频繁用到的知识内容。 抖音用户数据分析 1.理解数据 数据字段含义 了解数据内容&#xff0c;确保数据来源是正常的&#xff0c;安全合法的。理解一下每一个字段的…

C站你好,和你相遇的第1825天

文章目录 机缘收获日常成就憧憬 机缘 ①. 你好,C站 ②. 初识JAVA编程,遇到问题,粘贴问题百度搜索,大都数出来的解决方案都能在C站得到解决,对C站有一定的好感 ③. 起初在CSDN写博客,主要用来记录日常学习过程中的笔记、不断调整自己的笔记,如JAVA基础、框架、虚拟机等,为后…

java传base64返回给数据报404踩坑

一、问题复现 1.可能因为base64字符太长&#xff0c;导致后端处理时出错&#xff0c;表现为前端请求报400错误&#xff1b; 这一步debug进去发现base64数据是正常传值的 所以排除掉不是后端问题,但是看了下前端请求,猜测可能是转换base64时间太长数据过大导致的404 2.前端传…

聚观早报 |GPT-4周活用户数达1亿;长城汽车10月销量增加

【聚观365】11月8日消息 GPT-4周活用户数达1亿 长城汽车10月销量增加 xAI宣布推出PromptIDE工具 aigo爱国者连发5款儿童手表 SpaceX预计今年营收90亿美元 GPT-4周活用户数达1亿 在OpenAI首届开发者大会上&#xff0c;该公司首席执行官萨姆奥特曼&#xff08;Sam Altman&a…

删除word最后一页之后的空白页

最近编辑word比较多&#xff0c;有时最后一页&#xff08;最后一页内容还有可能是表格&#xff09;之后&#xff0c;还有一页空白页&#xff0c;单独按下backspace、del都删不掉&#xff0c;很让人着急。 经过查询有几种方法&#xff1a; &#xff08;1&#xff09;点击选中空…

C#中基于.NET6的动态编译技术

前几天要解决动态计算问题&#xff0c;尝试着使用了不同的方法。问题是给定一个包含计算的字符串&#xff0c;在程序运行中得到计算结果&#xff0c;当时考虑了动态编译&#xff0c;在网上查了一些资料完成了这项功能&#xff0c;可是基于不同的.NET平台使用的编程代码相差比较…

Spring Data JPA 项目配置与QueryDSL集成

一、说明 Spring Data JPA通过Spring Initializer创建时勾选相关依赖即可引入&#xff0c;QueryDSL需要单独引入。Spring JPA针对QueryDSL有比较好的兼容性&#xff0c;可以实现优雅的SQL构建。 二、设置JPA默认配置&#xff08;yaml格式&#xff09; spring:jpa:hibernate:…

【Linux】:使用git命令行 || 在github创建项目 || Linux第一个小程序——进度条(进阶版本)

在本章开始之前还是先给大家分享一张图片 这是C的笔试题 感兴趣的同学可以去试一试 有难度的哟 也可以直接在牛客网直接搜索这几道题目哈 好了今天我们正式进入我们的正题部分 &#x1f556;1.使用git命令行 安装git yum install git&#x1f560;2.在github创建项目 使用…