数组&双指针
数组上的双指针使用 Two Pointers

同向双指针
灵神说一般把“窗口大小不固定的叫做双指针,窗口大小固定的叫滑动窗口”,我觉得十分合理。双指针的题目关键在于从右端点开始遍历枚举,这不仅免除了一些判断的细节,模版也十分通用。当然这样的由双指针指向的子数组一般需要满足某种单调性,具体常常体现在数组元素都是正数这样的题设条件上。

这道209题中规中矩,主要是适应一下这种模版的书写方式。

这题稍微麻烦点,主要是当一个子数组合法时,以该子数组右端点合法子数组一共有right-left+1个,这一点如果一开始就是枚举右端点的话,应该不难想到。其他没什么意思。

这题换汤不换药,多了个hashMap用于快速获取子串内的个元素的出现频率。



这题是打周赛的时候遇到的,也是看到了灵神的题解广告才去的他B站开始看视频。这题我感觉有点难吧。。。如果要是之前没有接触过该类模版,比赛时我这脑子鬼TM想的出来喔!

相向双指针
和同向双指针不同,相向双指针的题一般需要先对数组经过排序。在一个有序的数组里找答案,为了节省时间复杂度,有时可以通过左右指针相向逼近去做,相遇时停止。

这题有双指针思维的应该很容易想到。

两个时间优化可以不加,稍微慢点。主要是除重,之前都是用set做,这里直接除,空间复杂度更好一些吧。我感觉没必要,就是练练相向双指针技巧。两数之和,三数之和,四数之和之前微软模拟面试的时候,妈的一起模拟的好多人都是假装思考,然后秒出答案,题都做烂了,没意思。


这题应用同样的木桶思想可以求出,不过接雨水都接魔怔了,很多解法,单调栈啥的,写过就忘,傻比一样没意思。这里记录一下。第二种用滚动数组优化了下,空间效率好点。灵神tql...