从数组中找到一对元素,其和等于给定的数字

从数组中找到一对元素,其和等于给定的数字

给定n个整数的数组,给定一个数X,找到所有唯一的元素对(a,b),其求和等于X。

下面是我的解决方案,它是O(nlog(N)+n),但我不确定它是否是最优的。

int main(void){
    int arr [10] = {1,2,3,4,5,6,7,8,9,0};
    findpair(arr, 10, 7);}void findpair(int arr[], int len, int sum){
    std::sort(arr, arr+len);
    int i = 0;
    int j = len -1;
    while( i < j){
        while((arr[i] + arr[j]) <= sum && i < j)
        {
            if((arr[i] + arr[j]) == sum)
                cout << "(" << arr[i] << "," << arr[j] << ")" << endl;
            i++;
        }
        j--;
        while((arr[i] + arr[j]) >= sum && i < j)
        {
            if((arr[i] + arr[j]) == sum)
                cout << "(" << arr[i] << "," << arr[j] << ")" << endl;
            j--;
        }
    }}


白猪掌柜的
浏览 830回答 3
3回答

森栏

#&nbsp;Let&nbsp;arr&nbsp;be&nbsp;the&nbsp;given&nbsp;array.#&nbsp;And&nbsp;K&nbsp;be&nbsp;the&nbsp;give&nbsp;sumfor&nbsp;i=0&nbsp;to&nbsp;arr.length&nbsp;-&nbsp;1&nbsp;do &nbsp;&nbsp;hash(arr[i])&nbsp;=&nbsp;i&nbsp;&nbsp;//&nbsp;key&nbsp;is&nbsp;the&nbsp;element&nbsp;and&nbsp;value&nbsp;is&nbsp;its&nbsp;index.end-forfor&nbsp;i=0&nbsp;to&nbsp;arr.length&nbsp;-&nbsp;1&nbsp;do &nbsp;&nbsp;if&nbsp;hash(K&nbsp;-&nbsp;arr[i])&nbsp;!=&nbsp;i&nbsp;&nbsp;//&nbsp;if&nbsp;K&nbsp;-&nbsp;ele&nbsp;exists&nbsp;and&nbsp;is&nbsp;different&nbsp;we&nbsp;found&nbsp;a&nbsp;pair&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;"pair&nbsp;i&nbsp;,&nbsp;hash(K&nbsp;-&nbsp;arr[i])&nbsp;has&nbsp;sum&nbsp;K" &nbsp;&nbsp;end-ifend-for
打开App,查看更多内容
随时随地看视频慕课网APP