双指针算法
树图思维导图提供 双指针 在线思维导图免费制作,点击“编辑”按钮,可对 双指针 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:33c446855350d39ea81679c4f864cabe
双指针思维导图模板大纲
对于一类题目,使用一个指针可能导致效率不足,这时候可以通过两个指针,提高效率
一个从头,一个从尾(回文类型)
一个从头,另一个与第一个同向(最长不连续子序列)
回文
对于一个字符串,一个从0开始,另一个从最后一位开始,检查两个值是否相同
while(p1<=p2){ if(s[p1]!=s[p2]){ flag=1; break; } p1++;p2--; }
最长不重复子区间
对于一个数组,两个都从1开始,第二个不停向后走,若不符合条件,第一个向前进一位,保证区间不会重复
for(int i=1,j=1;i<=n;i++){ book[a[j]]++; while(book[a[j]]>=2){ book[a[i]]--; i++; } maxs=max(maxs,j-i+1); }
把数组有奇数挪到序列前方,所有偶数挪到序列后方(可以改变顺序)
思路:一个指针从第一位开始,另一个从最后一位开始,第一个指针找到第一个不是奇数的数,第二个指针找到第一个不是偶数的数,随后两者交换
for(int p1=1;p1<=n;p1++){ while(a[p1]%2==1&&p1<=n) p1++; while(a[p2]%2==0&&p2>=1) p2--; if(p1>p2) break; swap(a[p1],a[p2]); }
树图思维导图提供 骨料和海外双极驱动,一体化布局领跑行业 在线思维导图免费制作,点击“编辑”按钮,可对 骨料和海外双极驱动,一体化布局领跑行业 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:3b02aa55260be20b1cc2be8dc21730b9
树图思维导图提供 硕士研究生 在线思维导图免费制作,点击“编辑”按钮,可对 硕士研究生 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:8528b76142aa72db1ab54df9efe11639