双指针小小结(数组版)

打印 上一主题 下一主题

主题 533|帖子 533|积分 1599

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

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

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

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

搜的图,思想很清晰
  做题时必须要确定何时让快指针停下以更新慢指针的索引,角度不同对于代码的难度也不同。3.滑动窗口

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

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

 
   首先,运算符的使用让代码好看许多,另外,nums[i++]的确是我没想到的表示方法,仅仅三行就把滑动窗口的思想表述了出来,美哉!
  另外就是一开始所设置的量----int result = INT32_MAX; 其实我并不理解什么意思,后来才知道,初始化时也可以是其他值,但是必须要比数组的长度大,否则在比较子数组时就会被划进去。因此保险起见,设置MAX最为稳妥。
4.左右指针

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

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

半亩花草

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表