http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1001 一开始的想法是排序后二分搜索,发现会进行非常多不必要的遍历,十分耗时间。 解决方法:在得到一对数之后顺便令数组长度进行缩短能够有效减少运行时间。 1 #include2 #include 3 using namespace std; 4 //int bs(int key,int num,int i,int n[],int sum); 5 6 int main() 7 { 8 int sum,num; 9 cin >> sum >> num;10 int n[num];11 for(int i=0; i > n[i];14 }15 sort(n,n+num);16 int left = 0;17 int f=0;18 int right = num-1;19 while(left < right)20 {21 if((sum-n[left])==n[right])22 {23 f=1;24 cout << n[left] << ' ' << sum - n[left] << endl;25 right--;26 left++;27 }28 else if((sum-n[left])>n[right])29 {30 left++;31 }32 else if((sum-n[left]) n[mid])66 // left = mid;67 // else if((sum-key)