有序數列中查詢和為某定值的兩個數

2021-06-26 02:29:49 字數 976 閱讀 9474

輸入乙個已經按公升序排序過的陣列和乙個數字k,

在陣列中查詢兩個數,使得它們的和正好是k。

要求時間複雜度是

o(n)

。如果有多對數字的和等於輸入的數字,輸出任意一對即可。

例如輸入陣列1、

2、4、

7、11、

15和數字

15。由於

4+11=15

,因此輸出4和

11。兩種思路

①設定兩個指標,begain指向陣列的第乙個元素,end指向最後乙個元素,判斷兩個數的和,若小於k,則begain後移,反之end遷移,直到找到符合要求的兩個數或兩指標相遇 ②

取最後陣列中最後乙個數(最大數)max,new乙個大小為max的陣列b,對於每個元素a[i],令b[ a[i] ]=1,其餘元素為0。

(類似雜湊表)

然後遍歷a,若b[ sum – a[i] ]==1,則找到這樣的一堆數。

滿足時間複雜度為on的要求,但空間複雜度可能很大。。。。

思路一:

#pragma once

#includeusing namespace std;

void match(int a, int size,int sum)

else

if (a[begain] + a[end] > sum)

end--;

else

begain++;

} if (!found)

cout << "there is no such kind of match" << endl;

}void main()

; int sum = 15;

match(a, 6, sum);

system("pause");

}

在排序陣列中查詢和為定值的兩個元素

題目 已知乙個已經按公升序排好序的陣列,現在輸入乙個數值sum,在陣列中查詢兩個數,使得這兩個數的和正好是輸入的sum,列印出這兩個數,如果存在多對這樣的數,依次列印出來。如 array 輸入sum 28,那麼列印出 8,20 10,18 演算法思想1 最傻瓜的演算法,先在陣列中固定乙個值,然後依次...

100題 在排序陣列中查詢和為給定值的兩個數

在排序陣列中查詢和為給定值的兩個數 include using namespace std bool findnum int data,unsigned int length,int sum,int n1,int n2 int ahead length 1 int behind 0 while ah...

尋找和為定值的兩個數

尋找和為定值的兩個數 給定乙個陣列 無序或者有序,兩種情況都要考慮 找出和為m的兩個數。最多時間複雜度能有多少?陣列有序的情況,在時間複雜度上我們就省去了排序的o nlogn 我們使用兩端指標掃瞄法是比較簡單的,時間複雜度為o n 空間複雜度為o 1 如下圖所示 然後,判斷它們指向的值之和sum是否...