1.双指针的分类
根据自己所刷代码随想录的一点点题目,以及学习算法小抄的解题技巧,我注意到双指针分为以下几种类型:
会有所遗漏,初刷题目,见谅
接下来我会按照我所刷题目的特点进行具体说明。ps:把同向理解成相向,但经过百度发现和相对意思一致,很抱歉orz
2.快慢指针
fast负责对数组进行快速遍历,寻找符合条件的元素,slow则根据fast所寻找元素进行更新,即利用一个for循环完成两个for循环的任务,降低了复杂度。
搜的图,思想很清晰
做题时必须要确定何时让快指针停下以更新慢指针的索引,角度不同对于代码的难度也不同。
3.滑动窗口
第一次接触这么有趣的算法!滑动窗口如名字所表示,通过调整双指针的位置动态的对数组中的元素进行增删操作,类似老人用筛子筛谷壳的操作,只不过它必须是连续的。
代码也很有意思,209.长度最小的子数组就利用了这个思想,关键在于如何确定一个for循环应该是表示起始位置还是终止位置,本题中for循环确定为终止位置,否则解法就与暴力解法无疑了,我个人觉得最妙的是这部分代码:
首先,运算符的使用让代码好看许多,另外,nums[i++]的确是我没想到的表示方法,仅仅三行就把滑动窗口的思想表述了出来,美哉!
另外就是一开始所设置的量—-int result = INT32_MAX; 其实我并不理解什么意思,后来才知道,初始化时也可以是其他值,但是必须要比数组的长度大,否则在比较子数组时就会被划进去。因此保险起见,设置MAX最为稳妥。
4.左右指针
二分查找的思想与此有关,通过面对面移动指针最终找到目标,我刷的题不多,仅仅知道这个orz.
5.碎碎念时间
没错我又要碎碎念啦!今天是加入代码随想录第五天,第四天的任务还没做,补博客中,很明显感觉到后面的链表专题开始吃力了,一定要坚持,双指针好有意思,我刷题开始上瘾咯!
感谢观看呀~
机房租用,北京机房托管,大带宽租用,IDC机房服务器主机租用托管-价格及服务咨询 www.e1idc.net