相向双指针
2个指针分别位于头和尾, 同时向中间移动直到错位 while (left <= right)
quick sort 方法二: 相向双指针
背向双指针
2个指针背靠背: left = x; right = x + 1, 同时向两端移动直至out of range, range [start, end]
- 2个指针要从相邻的2个点开始, 而不是从同一个点开始
- while loop 大部分情况是
while(left >= 0 && right < len)
int left = x, right = x + 1; while( left >= start && right <= end) { if (可以停下的条件) break; left --; right ++; }
同向双指针
2个指针从同一个起点开始, 同时向同一个方向移动
for loop之类的while loop根据情况不同会有变化, 似乎有很多时候是j < i => todo find examples
int j = 0; for(int i = 0; i < len; i ++) { while( j < len && i和j之间不满足条件) j ++ if (i和j满足条件) 处理i和j }
合并双指针
2个指针分别位于两个不同的array的起点, 同时向右移动 (多用于合并两个array, linkedlist之类的)
- 3 个while loop
- 第1个while loop: 同时处理2个array
- 第2和3个while loop: 处理第一个while loop结束时候剩余的还没有处理完的那个array
int[] res = new int[m + n]; int i = 0, j = 0, p = 0; while(i < m && j < n) { if (nums1[i] < nums2[j]) res[p ++] = nums1[i ++]; else res[p ++} = nums2[j ++]; } while(i < m) res[p ++] = nums1[i ++]; while(j < n) res[p ++] = nums2[j ++];
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.