双指针问题一般都是针对排序好的数组模拟,但也不一定,只要能找到单调性就行
独孤九剑:对于求 2 个变量如何组合的问题,可以循环其中一个变量,然后研究另外一个变量如何变化(如果是3维就降成2维) 这本身就是双指针的逻辑
双指针算法的核心思想就是能将两重for循环暴力的o(n^2)的时间复杂度利用某些性质例如两根指针之间的单调性,只用枚举n个数优化到o(n)
可以先想一下暴力的方法之后再进行优化,再找单调关系,找到单调关系就可以减少枚举了(比如当不满足check时,剩下的元素也就不用讨论了),可以将时间复杂度降一维,然后套一下模板就行
其实在用双重for循环的时候就已经用到双指针了,i和j其实就是双指针,只不过最后你需要优化出单调性使其变为o(n)才是真正的双指针
在写双指针的时候必须要清楚每个指针的作用是什么,通过画图搞懂两个指针什么时候会移动
要注意条件的判断:例如同向双指针中:while循环中要时刻注意left<right,因为while之前left和right可能发生变化,因此要重新判断
双指针要不就维护两个序列要不就维护一个序列