相向双指针

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 ++]; 

This free site is ad-supported. Learn more