代码随想录训练营day2

文章讨论了两种使用双指针技术解决数组问题的方法。第一种是对于非递减数组的平方操作,通过双指针避免了排序,保持了非递减顺序。第二种是寻找和小于等于给定值s的最小连续子数组,利用滑动窗口的概念动态调整窗口大小以找到满足条件的最小子数组长度。这两种方法都优化了时间复杂度,避免了暴力遍历的效率问题。
摘要由CSDN通过智能技术生成

有序数组的平方

题目描述:

一个非递减数组nums,返回每个数字平方的新数组,也要求非递减。

个人刚开始思路:先把数组中的每个元素平方在快速排序,跟卡哥的思路一样;这样的结果

时间复杂度是:O(log(n )+n),快排logn+遍历变成平方n

也就是暴力排序:

e618982d5bfe44b28d8ba2d6fbec1a3a.jpg

题解指出:因为新数组也是非递减的,新元素来自于原数组最大的元素或者原数组最小的元素(负数最小,平方可能就是最大);

所以用双指针法i、j,i指向数组最左边(也就是最小元素),j指向数组最右边(也就是最大元素),在用k指针指向result数组终止位置(卡哥给的是k指向新数组终止位置,然后递减忘前遍历,这里我想试试k指向新数组起始位置然后递增,一会试验结果)

核心代码如下:6~13行

14b55b0f7c0148d383b4680c3b357a09.jpg

 此题相对简单,猜测有进阶版本;

力扣题目209 长度最小的子数组

描述:一个含有n个正整数的数组,和一个正整数s,找出该数组中其和>=s的最小连续子数组,并返回其长度。如果没有符合的,返回0。

个人思路:暴力法:两层for循环,一层遍历数组,一层得到连续子数组之和在此比较,然后得出结果。时间复杂度:O(n*2);此种解法时间复杂度太高,可以改进用一层for循环解决,所以引出双指针法。

cedcc5c0d025472aa1d51355627d74e5.jpg

卡哥思路:双指针法(滑动窗口)

求最小连续子数组,还是一层for循环 ,然后不断调整窗口位置(保证内部符合题目要求);

窗口的起始位置如何移动:如果当前窗口的值大于s了,窗口就要向前移动了(也就是该缩小了)。

窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。

精髓代码:  sum -=nums[i++];

ac70afb3c1e14725bf193dbac7c057be.jpg

 具体细节如9行的让数组累加;

13行的result语法

14行的精髓代码,这里是已经找到符合的连续子序列,但不一定是最小的,所以通过动态变化来寻找到最小的。

最小:体现在起始指针要遍历完数组找到;连续也是

此题需要多多复习!是一道理解双指针的好题。

()

代码随想录算法训练营是一个优质的学习和讨论平台,提供了丰富的算法训练内容和讨论交流机会。在训练营中,学员们可以通过观看视频讲解来学习算法知识,并根据讲解内容进行刷题练习。此外,训练营还提供了刷题建议,例如先看视频、了解自己所使用的编程语言、使用日志等方法来提高刷题效果和语言掌握程度。 训练营中的讨论内容非常丰富,涵盖了各种算法知识点和解题方法。例如,在第14天的训练营中,讲解了二叉树的理论基础、递归遍历、迭代遍历和统一遍历的内容。此外,在讨论中还分享了相关的博客文章和配图,帮助学员更好地理解和掌握二叉树的遍历方法。 训练营还提供了每日的讨论知识点,例如在第15天的讨论中,介绍了层序遍历的方法和使用队列来模拟一层一层遍历的效果。在第16天的讨论中,重点讨论了如何进行调试(debug)的方法,认为掌握调试技巧可以帮助学员更好地解决问题和写出正确的算法代码。 总之,代码随想录算法训练营是一个提供优质学习和讨论环境的平台,可以帮助学员系统地学习算法知识,并提供了丰富的讨论内容和刷题建议来提高算法编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [代码随想录算法训练营每日精华](https://blog.csdn.net/weixin_38556197/article/details/128462133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值