給定乙個整型陣列a和乙個數sum,設計乙個演算法找到陣列中所有的整數對(a[i], a[j]),其中a[i] + a[j] == sum。
思路:可以用bitmap或者雜湊來做,這樣可以達到o(n)的複雜度。遍歷一次陣列,將bitmap[a[i]]的值置為1,然後再去檢查bitmap[sum - a[i]]的值是否為1,這樣就找到滿足條件的整數對。如果陣列中有重複數字且整數對中的數字不能重複計算,例如:(2, 2, 3),sum = 5,正確結果為,但bitmap的結果為,此時可以用雜湊表,hash[a[i]]的值為a[i]的出現次數。但是這樣的方法可能會造成大量的空間浪費,比如陣列的大小較小,但陣列中最大值非常大。
另外乙個思路就是先排序,然後設定頭尾指標往中間掃瞄,複雜度為o(nlogn)。
#include #include #include using namespace std;
void findpair(vectorivec, int sum)
else if (ivec[left] + ivec[right] > sum)
--right;
else
++left; }}
int main()
尋找和為定值的數
尋找和為定值的兩個數 include using namespace std include 排序夾逼 時間複雜度為o nlogn n o nlogn 空間複雜度 o 1 void twosum int a,unsigned int length,int sum else void funtest ...
程式設計之美 數字的魅力 和為定值的數
1.和為定值的兩個數 輸入乙個陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。思路 1 窮舉,遍歷計算兩個數的和,看看是否跟給定的值相等o n n 2 先排序o n logn 然後s1 sum s2,看s1是否在陣列中,這裡用二分查詢這裡也是o n logn 3 先排序o n ...
尋找和為定值的多個數
程式設計求解 輸入兩個整數 n 和 m,從數列1,2,3.n 中 隨意取幾個數,使其和等於 m 要求將其中所有的可能組合列出來。include includeusing namespace std 全域性變數 listlist1 從1,2.n找到和為sum的數字 void find factor i...