快速尋找滿足條件的兩個數(程式設計之美)

2021-06-17 23:50:15 字數 736 閱讀 5431

快速找出乙個陣列中的兩個數,讓此兩個數之和等於乙個給定的數。

如:5 6 1 4 7 9 8 中找出兩個數之和等於10的數

程式設計之美之美p177有詳細解答過程,思路是先排序(o(nlog(n)),然後儲存兩個指標beg、end,初始指向頭部和尾部,如過*beg+*end==sum,則返回;如果*beg+*end>sum則向前移動end;*beg+*end擴充套件問題:

1、快速找出乙個陣列中的3個數,讓此兩個數之和等於乙個給定的數。如5 6 1 4 7 9 8 中找出3個數之和等於14的數

思路:我們借鑑兩個數之和等於指定值的思路。

首先,排序。陣列變成 1 5 6 7 8 9;

其次,我們用乙個指標p從後往前掃瞄,直到*p*3個為止。

確定p指標後,再p指向前面的陣列範圍中尋找兩個數之和等於sum-*p的兩個數。可以用前面的演算法。

如p指向9的時候,我們在p指向前面的陣列範圍中尋找兩個數之和等於5,未找到;p指向8,在8前面的陣列範圍中尋找兩個數之和等於4,為找到;p指向7,在7前面的陣列中找兩個數之和等於7,我們找到6、1;p指向6,在6前面的陣列中找兩個數之和等於8,未找到;p指向5,....

先寫到這裡,下面的問題,下次補充

2、快速找出乙個陣列中的4個數,讓此4個數之和等於乙個給定的數。如5 6 1 4 7 9 8 中找出4個數之和等於19的數

3、如何找出乙個陣列中的4個數,讓其中3個數之和等於另乙個數。如5 6 1 3 7 9 8 中找出4個數,讓其中3個數之和等於另乙個數

程式設計之美 快速尋找滿足條件的兩個數

能否快速找出乙個陣列中的兩個數字,讓這兩個數字之和等於乙個給定的值,為了簡化起見,我們假設這個陣列中肯定存在至少一組符合要求的解。法一 最直接的方法就是,窮舉法,複雜度為o n 2 法二 利用sum減去a i 再查詢sum a i 是否在陣列裡,這時候就變成查詢了,可利用二分查詢 排序的複雜度為o ...

程式設計之美2 12 快速尋找滿足條件的兩個數

題目 能否快速找出乙個陣列中的兩個數字,讓這兩個數字之和等於乙個給定的值m。解法一 窮舉 o n 2 解法二 先排序,再二分查詢m a i 排序o nlogn 每個數二分查詢o nlgon 總的時間複雜度o nlogn 解法三 hash表,給定乙個數字,根據hash對映查詢另乙個數字是否在陣列中,o...

程式設計之美2 12 快速尋找滿足條件的兩個數

快速尋找滿足條件的兩個數 程式設計之美2.12 include using namespace std 快速排序演算法 void swap int a,int i,int j int partition int a,int low,int high swap a,low,high while low...