14. 求有序数组中一对值,使和等于输入值

类似于算法导论2.3-7,它要求在一个无序集合中找出2个数和等于x。首先对它排序,快排O(nlgn),然后就是本题了。

代码:

/*
     因为已经是有序的,设置两个指针指向开始和结束,然后相加它们,若和>给定的值,则尾指针向前,若和<给定的值,则头指针向后,若和=给定的值,则退出。
     时间是O(n)
 */
#include<iostream>
using namespace std;


void getsum(int *a,int begin,int end,int sum)
{
    bool flag=false;
    while(begin<=end)
    {
        if(a[begin]+a[end]==sum)
        {
            flag=true;
            break;
        }
        else if(a[begin]+a[end]<sum)
            begin++;
        else
            end--;
    }
    if(flag)
        cout<<a[begin]<<""<<a[end]<<"的和是"<<sum<<endl;
    else
        cout<<"没有2个元素的和是"<<sum<<endl;

}

int main(void)
{
    int a[]={1,2,4,7,11,15};

    int sum;
    cin>>sum;
    getsum(a,0,5,sum);
    return 0;
}

 打印所有的,在a[begin]+a[end]==sum时继续下去就OK了。

原文地址:https://www.cnblogs.com/buxianghe/p/3210593.html