問題を解決するためにO(n)の複雑さのために、アイデアをシーケンスを走査しながら、私は、2つの2のポインタ---- I、J 2つの添え字の使用を考えました

配列は問題を解決するためのアイデアの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 }

 

 

 

 

 

 


おすすめ

転載: www.cnblogs.com/hi3254014978/p/12218844.html