算法之路(一)

🖊作者 : 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.mzph.cn/news/137488.shtml

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

相关文章

使用Ruby编写通用爬虫程序

目录 一、引言 二、环境准备 三、爬虫程序设计 1. 抓取网页内容 2. 解析HTML内容 3. 提取特定信息 4. 数据存储 四、优化和扩展 五、结语 一、引言 网络爬虫是一种自动抓取互联网信息的程序。它们按照一定的规则和算法&#xff0c;遍历网页并提取所需的信息。使用Rub…

初识Linux:目录路径

目录 提示&#xff1a;以下指令均在Xshell 7 中进行 一、基本指令&#xff1a; 二、文件 文件内容文件属性 三、ls 指令拓展 1、 ls -l &#xff1a; 2、ls -la&#xff1a; 3、ls [目录名] &#xff1a; 4、ls -ld [目录名]&#xff1a; 四、Linux中的文件和…

串口通信(11)-CRC校验介绍算法

本文为博主 日月同辉&#xff0c;与我共生&#xff0c;csdn原创首发。希望看完后能对你有所帮助&#xff0c;不足之处请指正&#xff01;一起交流学习&#xff0c;共同进步&#xff01; > 发布人&#xff1a;日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…

2023.11.10联赛 T3题解

题目大意 题目思路 感性理解一下&#xff0c;将一个数的平方变成多个数平方的和&#xff0c;为了使代价最小&#xff0c;这些数的大小应该尽可能的平均。 我们可以将 ∣ b i − a i ∣ |b_i-a_i| ∣bi​−ai​∣放入大根堆&#xff0c;同时将这个数划分的次数以及多划分一段减…

Xmake v2.8.5 发布,支持链接排序和单元测试

Xmake 是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量&#xff0c;没有任何依赖&#xff0c;因为它内置了 Lua 运行时。 它使用 xmake.lua 维护项目构建&#xff0c;相比 makefile/CMakeLists.txt&#xff0c;配置语法更加简洁直观&#xff0c;对新手非常友好&#x…

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

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

FPGA设计过程中有关数据之间的并串转化

1.原理 并串转化是指的是完成串行传输和并行传输两种传输方式之间的转换的技术&#xff0c;通过移位寄存器可以实现串并转换。 串转并&#xff0c;将数据移位保存在寄存器中&#xff0c;再将寄存器的数值同时输出&#xff1b; 并转串&#xff0c;将数据先进行移位&#xff0…

AI:74-基于深度学习的宠物品种识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

OpenHarmony,奏响中国基础软件的“光辉岁月”

梦想需要多久的时间&#xff0c;多少血和泪&#xff0c;才能慢慢实现&#xff1f; 天地间任我展翅高飞&#xff0c;谁说那是天真的预言&#xff1f; 《光辉岁月》歌词中的这两个问题&#xff0c;恰好可以送给今天的中国基础软件事业。 曾几何时&#xff0c;我们认为中国基础软件…

使用jdk21预览版 --enable-preview

异常 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project sb3: Compilation failure [ERROR] --enable-preview 一起使用时无效 [ERROR] &#xff08;仅发行版 21 支持预览语言功能&#xff09; 解决…

Matlab导出高清图片方法

一、背景 使用matlab绘制图片后&#xff0c;需要将图片导出为.jpg或.eps格式以便后期使用。但通过文件–另存为.jpg时&#xff0c;并没有清晰度选择&#xff0c;导出的图片只有30几k&#xff0c;以至于图片很模糊。 二、Matlab导出高清图片方法 文件—导出设置 1、大小&…

Unreal Engine 学习笔记 (3)—— 导入资源

1.导入FBX文件 打开系统文件管理器按下鼠标左键拖动fbx文件到UE编辑器中松开鼠标左键在弹出对话框FBX导入选项页面中&#xff0c;选择对应的骨骼 重定向骨骼 拖动UE4的walk_strafe_back.fbx文件到UE5编辑器中 在弹出的FBX导入选项对话框中选择UE4对应的骨骼 使用重定向资产…

【Spring】SpringBoot配置文件

SpringBoot配置文件 配置文件作用SpringBoot配置文件配置文件快速入手配置文件的格式properties配置文件说明基本语法读取配置文件properties缺点分析 yml配置文件说明yml基本语法yml使用进阶yml配置读取配置对象配置集合配置Mapyml优缺点 配置文件作用 计算机上有数以千计的配…

如何利用产品帮助中心提升用户体验

在当今竞争激烈的市场中&#xff0c;提供优秀的用户体验是吸引和保留客户的关键。而一个高效和易于使用的产品帮助中心&#xff0c;正成为越来越多企业用以提升用户体验的重要工具。产品帮助中心是一个集中的信息库&#xff0c;为用户提供关于产品功能、故障排除、常见问题解答…

oracle使用regexp_substr来拆分,CONNECT BY LEVEL查询卡死,速度慢的问题。

一、问题 oracle 使用regexp_substrCONNECT BY LEVEL来&#xff0c;根据特定字符拆分成多行。 &#xff08;注意这里我的数据是每个值都有“ ; ”&#xff0c;即使后面没有值&#xff0c;后面也会有个“ ; ”&#xff0c; 如果是正常的分隔符&#xff0c;sql 需要改成” LEVEL…

github遇到想要强制拉取远程仓库内容

进行项目的时候&#xff0c;遇到了我的远程仓库 Sync fork 更新以后&#xff0c;这时候我的本地就和远程不同步&#xff0c;如果使用 git pull 的时候&#xff0c;如果出现 conficts 过多的情况怎么办&#xff0c;如果我们想要直接把远程仓库拉下来应该怎么办&#xff1f; git…

爆肝一文,走进大名鼎鼎的HTTP协议(通俗白话+三万字超详细+抓包工具使用)

文章目录 前言1. HTTP 是什么1.1 HTTP 完整请求流程1.2 理解 HTTP 协议的工作过程 2. HTTP 协议格式2.1 抓包工具的使用2.2 抓包工具的原理2.3 抓包结果2.4 协议格式总结 3. HTTP 请求(Request)3.1 认识 URL(Uniform Resource Locator)URL 基本格式关于 URL encode 3.2 认识请求…

Spring Cloud 微服务入门篇

文章目录 什么是微服务架构 Microservice微服务的发展历史微服务的定义微小的服务微服务 微服务的发展历史1. 微服务架构的发展历史2. 微服务架构的先驱 微服务架构 Microservice 的优缺点1. 微服务 e Microservice 优点2. 微服务 Microservice 缺点微服务不是银弹&#xff1a;…

【hcie-cloud】【5】华为云Stack规划设计之华为云Stack标准化配置、缩略语【下】

文章目录 前言、华为云Stack交付综述为云Stack标准组网华为云Stack标准化配置华为云Stack配置概览华为云Stack云服务全视图华为云Stack部署方案节点类型说明华为云Stack云服务组件部署场景管理节点部署原则云平台管理规格华为云Stack IaaS场景&高阶场景起步必选部署组件x86…

已解决:Rust Error: the trait bound is not satisfied 问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…