面试题---两数之和

来源:互联网 发布:mac itune 制作铃声 编辑:程序博客网 时间:2024/05/16 13:45
题目:输入一个已经按升序排序过的数组和一个数字,
在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是O(n)。
  如果有多对数字的和等于输入的数字,输出任意一对即可。
  例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。

代码如下:
#include<iostream>using namespace std;/*start往上增长,end往下递减。1.出现data[start] + data[end] > sum的情况是建立在data[start - 1] + data[end] < sum的情况,不包括初始值,  所以在此基础上必定为 data[start - 1] + data[end - 1] < sum,所以data[start] + data[end] == sum才有可能2.出现data[start] + data[end] < sum的情况,如果start不变,小于end的下标的数据都不能满足,只能start++3.*/void FindtwoofSum(int sum,int *data,int length){int start = 0;int end = length - 1;int temp;while(start < end){temp = data[start] + data[end];if(temp == sum){cout<<"The sum consist of "<<data[start]<<" + "<<data[end]<<endl;return;}else if(temp > sum)end--;elsestart++;}cout<<"the numbers are not exist!!"<<endl;}int main(){int data[] = {1,2,4,7,11,15};FindtwoofSum(15,data,6);return 0;}


原创粉丝点击