标签:data spl img inf dex alt idt 代码 code
two pointers思想 ---- 利用两个i, j两个下标,同时对序列进行扫描,以O(n)复杂度解决问题的一种思想, 如果能用这种思想解决问题,那么会大大降低程序的复杂度。
两个利用这个思想的例子:
1.
分析:
代码:
1 while (i < j){ 2 if (a[i] + a[j] == m){ 3 printf("%d %d\n", i, j); 4 i++; 5 j++; 6 } 7 else if (a[i] + a[j] < m){ 8 i++; 9 } 10 else{ 11 j++; 12 } 13 }
2.
思路:
代码:
1 int merge(int A[], int B[], int C[], int n, int m){ 2 int i = 0, j = 0, index = 0; // i指向A[0], j指向B[0] 3 while (i < n && j < m){ 4 if (A[i] < B[j]){ 5 C[index++] = A[i++]; 6 } 7 else if (A[i] > B[j]){ 8 C[index++] = B[j++]; 9 } 10 else{ 11 C[index++] = A[i++]; 12 j++; 13 } 14 } 15 16 while (i < n) 17 C[index++] = A[i++]; // 将序列A的剩余元素加入序列C 18 while (j < m) 19 C[index++] = B[j++]; // 将序列B的剩余元素加入序列C 20 21 return index; 22 }
two pointers思想 ---- 利用两个i, j两个下标,同时对序列进行扫描,以O(n)复杂度解决问题的一种思想
标签:data spl img inf dex alt idt 代码 code
原文地址:https://www.cnblogs.com/hi3254014978/p/12218844.html