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

Posted 要知道明天会更好

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法面试题80道(14)相关的知识,希望对你有一定的参考价值。

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)的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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