找出排序陣列中和為給定值的兩個數字
阿新 • • 發佈:2019-01-05
題目:輸入一個已經按升序排序過的陣列和一個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是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;
}