1. 程式人生 > >找出排序陣列中和為給定值的兩個數字

找出排序陣列中和為給定值的兩個數字

題目:輸入一個已經按升序排序過的陣列和一個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是O(n)。如果有多對數字的和等於輸入的數字,輸出任意一對即可。
例如:A[]={1,2,3,4,5,6,7,8,9}, sum = 15,輸出6,9.

思路:
因為陣列是有序的,因此我們可設兩個指標left,right,分別從頭和從尾部遍歷,若A[left] + A[right] > sum,則right–;若A[left] + A[right] < sum,則left++;否則我們就找到了所需的兩個數字,分別為A[left]和A[right]。

void
findTwoNumber(int A[],int n,int sum){ //A是遞增陣列 int left = 0; int right = n - 1; int target1; int target2; while(left < right){ if(A[left] + A[right] > sum){ right--; } else if(A[left] + A[right] < sum){ left++; } else
{ target1 = A[left]; target2 = A[right]; break; } } cout<<target1<<" "<<target2<<endl; }