配列は問題を解決するためのアイデアのO(n)の複雑さのためにスキャンしながら、彼らが問題を解決するために、この考えを使用できる場合、2つの考えを使用して、2つのポインタが---- I、J 2つの添字、、、それは非常に意志プログラムの複雑さを軽減。
このアイデアの使用の2つの例:
1。
分析:
コード:
1 ながら(I < J){ 2 であれば([I] + [J] == M){ 3 のprintf(" %D%D \ n " 、i、j)は、 4 I ++ ; 5 J ++ ; 6 } 7 そう であれば([I] + [J] < M){ 8 iは++ ; 9 } 10 他{ 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 }