码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构与算法面试题80道(14)

时间:2016-03-11 13:52:06      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

14:

题目:输入一个已经按升序排序过的数组和一个数字,

在数组中查找两个数,使得它们的和正好是输入的那个数字。

要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。

例如输入数组12471115和数字15。由于4+11=15,因此输出411

 

思路:从前后同时往中间扫,如果当前两个数的和大于sum,后面的数往前移,如果和小于sum,前面的数往后移。

 

 

#include<cstdio>
#include<iostream>
using namespace std;
void findNum(int arr[],int length,int sum){
    int left=0,right=length;
    while(left<right){
        if(arr[left]+arr[right]==sum) {
            cout<<arr[left]<<" "<<arr[right]<<endl;
            return;
        }
        else if(arr[left]+arr[right]>sum) right--;
        else left++;
    }
    cout<<"cannot find"<<endl;
}

int main(){
    int arr[]={1,2,4,7,11,15};
    int length=sizeof(arr)/sizeof(arr[0])-1;
    findNum(arr,length,15);
    return 0;
}

 

数据结构与算法面试题80道(14)

标签:

原文地址:http://www.cnblogs.com/wabi87547568/p/5265213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!