双指针用的好,力扣刷题没烦恼~
  话不多说,干货直接塞:

1.双指针的分类

  根据自己所刷代码随想录的一点点题目,以及学习算法小抄的解题技巧,我注意到双指针分为以下几种类型:

 

 

会有所遗漏,初刷题目,见谅

 

   接下来我会按照我所刷题目的特点进行具体说明。ps:把同向理解成相向,但经过百度发现和相对意思一致,很抱歉orz

2.快慢指针

  fast负责对数组进行快速遍历,寻找符合条件的元素,slow则根据fast所寻找元素进行更新,即利用一个for循环完成两个for循环的任务,降低了复杂度。

搜的图,思想很清晰

  做题时必须要确定何时让快指针停下以更新慢指针的索引,角度不同对于代码的难度也不同。

3.滑动窗口

  第一次接触这么有趣的算法!滑动窗口如名字所表示,通过调整双指针的位置动态的对数组中的元素进行增删操作,类似老人用筛子筛谷壳的操作,只不过它必须是连续的。

 

   代码也很有意思,209.长度最小的子数组就利用了这个思想,关键在于如何确定一个for循环应该是表示起始位置还是终止位置,本题中for循环确定为终止位置,否则解法就与暴力解法无疑了,我个人觉得最妙的是这部分代码:

 

   首先,运算符的使用让代码好看许多,另外,nums[i++]的确是我没想到的表示方法,仅仅三行就把滑动窗口的思想表述了出来,美哉!

  另外就是一开始所设置的量----int result = INT32_MAX; 其实我并不理解什么意思,后来才知道,初始化时也可以是其他值,但是必须要比数组的长度大,否则在比较子数组时就会被划进去。因此保险起见,设置MAX最为稳妥。

4.左右指针

  二分查找的思想与此有关,通过面对面移动指针最终找到目标,我刷的题不多,仅仅知道这个orz.

 5.碎碎念时间

  没错我又要碎碎念啦!今天是加入代码随想录第五天,第四天的任务还没做,补博客中,很明显感觉到后面的链表专题开始吃力了,一定要坚持,双指针好有意思,我刷题开始上瘾咯!

  感谢观看呀~

 

posted on 2023-03-19 21:43  404NFzz  阅读(84)  评论(0编辑  收藏  举报