在排序数组中查找和为给定值的两个数字

来源:互联网 发布:linux环境变量的作用 编辑:程序博客网 时间:2024/05/01 01:46

题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。

例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。

分析:一个数指向数组的第一个数,另一个数指向数组的最后一个数,如果两数之和大于给定的数,那么第二个数指向前一个数,如果两数之和小于给定的数,那么第一个数指向后一个数,如果两数之和与给定数相等,那么两个数所指就是所求。

#include<iostream>using namespace std;int main(){int a[]={1,2,4,7,11,15};int i=0,j=5;int SUM=15;while(i<j){int sum=a[i]+a[j];if(sum==SUM){cout<<a[i]<<" "<<a[j]<<endl;break;}else if(sum>SUM)j--;elsei++;}if(i==j)cout<<"无此两个数"<<endl;return 0;}


0 0