輸入一個已經按升序排序過的陣列和一個數字, 在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。
阿新 • • 發佈:2019-02-11
題目:輸入一個已經按升序排序過的陣列和一個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。
要求時間複雜度是 O(n)。如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入陣列 1、2、4、7、11、15 和數字 15。由於 4+11=15,因此輸出 4 和 11。
由於是有序的,可以用雙指標來做。第一個指標i指向a[0],第二個j指向a[n-1],
若a[i]+a[j]>v,j--;
若a[i]+a[j]<v,i++;
若a[i]+a[j]=v,結束。
#include <iostream> using namespace std; void find(int a[],int n,int v) { int i=0; int j=n-1; while(i<j ) { if(a[i]+a[j]<v) { i++; } else if(a[i]+a[j]>v) { j--; } else { cout<<a[i]<<" + "<<a[j]<<" = "<<v<<endl; return; } } } void main() { int a[10]={1,3,6,8,11,13,15,17,20,22}; find(a,10,4); system("pause"); }