乙個無序陣列中兩個數之和等於給定的值sum

2021-07-15 01:25:40 字數 945 閱讀 1979

【問題描述】

給定乙個陣列,求兩個數之和=給定值sum的所有組合個數。

【變形】兩個數之和=sum的任意一組數

【方法一】窮舉法

從陣列中任意找兩個數,看其和是否=sum。時間複雜度o(n

^2

)

【方法二】先排序,然後定義兩個指標,乙個i=0指向陣列頭,乙個j=len-1指向陣列的尾,看其和是否==sum;若==,則查詢成功返回;若》sum,則尾指標j--;若

時間複雜度:快排o(nlogn),查詢o(n);所以總的時間複雜度為:o(nlogn)

**:

int getsumnum(int *arr,int sum),   //arr為陣列,sum為和 

return ( -1 , -1 );

}

【方法三】hash表

給定乙個數,根據hash表查詢另乙個數隻需要o(1)的時間。但需要空間換時間,空間複雜度為o(n);

可以用hashmap實現,hashmap次數

>。

遍歷一遍陣列,若次數沒有存在hashmap中,則將其加入,次數為1;再遍歷一遍陣列,對每個值a[i],判斷sum-a[i]是否在hashmap中【即對應的value是否==1】;若存在,則查詢成功;否則繼續遍歷下乙個。直到遍歷完整個陣列。

int  getsum(int *a, int len, int sum)

} return false;

}

【注意】

calloc(n, sizeof(型別));預設初始化值全為0【布林型時即全為false】;而malloc預設的初始值可以為任意數。這是calloc的優勢,在此定義bool型時。

1 無序陣列中找出兩個數使其和等於給定值

碰到這種類似題目可以根據條件不同寫出不同時間複雜度的 1.最暴力的遍歷,時間複雜度為o n 2 2.一般情況下先排序,再從兩邊向中間搜尋結果,時間複雜度為o nlogn n int i 0,j numbers.size 1 while i j 3.如果陣列所有數都是唯一的,可以用unordered ...

兩數之和等於乙個數

題目01 兩數之和等於乙個數 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。方法1 巢狀迴圈 class solution return indexs...

有序陣列中兩個數的和等於乙個輸入值的函式

輸入乙個已經按公升序排序過的陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度為o n 如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入陣列1,2,4,7,11,15和數字15,由於4 11 15,因此輸出4和11.如下 data 為有序陣列,lengt...