在陣列中尋找和為指定值的兩個數
題目:在陣列中尋找和為指定值的兩個數,如arr={1, 2,3,4,7,8} ,指定值sum為12,返回4+8=12
方法1:
採用暴力破解(即窮舉),時間複雜度為O(n*n),即對每一個數arr[i],搜尋sum-arr[i]在不在陣列中。
方法2:
根據方法1,如果陣列已經排好序,可以使用二分查詢sum-arr[i];如果沒有排好序可以使用某種排序演算法對其先進行排序(如平均複雜度為nlogn的快排(取決於劃分元的選擇,可以選取第一個,或者第一個和中間元素和最後一個的中位數,或者隨機選取,或者按照BFPRT演算法那樣選取等),nlogn的堆排序或者歸併排序等)。時間複雜度為nlogn。
方法3:
可以採用Hash表儲存,對於每一個元素arr[i],在Hash表中查詢sum-arr[j]是否存在,因為Hash查詢的時間複雜度為O(1),所以期望的時間複雜度為O(n),但是因為Hash表空間有限,所以會產生衝突,解決衝突的方法有連結串列法和開放地址法等,比如連結串列法在極端情況下,所有元素都存在一個鏈中,那麼就退化為O(n*n),這取決於Hash函式與Hash表的空間大小。這是典型的用空間換取時間。
方法4:
如果只是陣列中最多存在一對這樣的數,便可以採取下面的方法:
比如arr={1,2,3,4,7,8},sum=12
首先求得sum-arr={11,10,9,8,5,4}
然後定義兩個索引標號i與j,i從arr頭開始向後移動,j從sum-arr尾開始向前移動,哪個指向的元素小,就先移動到大於等於另一個指向的元素,如果兩個指向的元素相等,則選出該元素,繼續移動,直到到達邊界。選中的兩個元素便是結果,如果選出的元素個數小於2則該陣列中沒有符合條件的。但是該方法有個缺陷,如果含有多對符合條件的元素對,那麼最後要從選出的結果中繼續尋找。
方法5:
如果陣列是無序的,則可以先進行排序(nlogn)。然後定義兩個索引標號i與j,分別指向排序後的陣列的頭和尾,然後i向後移動(++i),j向前移動(++j),到i>=j則停止。
如果arr[i]+arr[j]=sum,則找到了一對,然後++i和++j,繼續尋找;
如果arr[i]+arr[j]>sum,則--j;
如果arr[i]+arr[j]<sum,則++i;
到i>=j則停止。
時間複雜度為O(n)。
相關文章
- 尋找陣列中和為定值的兩個數陣列
- 尋找兩個有序陣列的中位數陣列
- 尋找兩個正序陣列中的中位數陣列
- 4. 尋找兩個正序陣列的中位數陣列
- 數字之魅:尋找陣列中的最大值和最小值陣列
- LeetCode--尋找兩個有序陣列的中位數(05)LeetCode陣列
- LeetCode第4題:尋找兩個有序陣列的中位數LeetCode陣列
- 尋找陣列中的最大值和最小值O(1.5*N)陣列
- 力扣演算法題:尋找兩個正序陣列的中位數力扣演算法陣列
- 尋找兩個正序陣列的中位數問題,方法一:合併陣列檢索法陣列
- [LeetCode 刷題] 4. 尋找兩個有序陣列的中位數 (Hard)LeetCode陣列
- GO實現:leetcode之尋找兩個正序陣列的中位數GoLeetCode陣列
- (七)一個尋找陣列中眾數的演算法陣列演算法
- 給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。陣列
- LeetCode解題(C++)-4. 尋找兩個有序陣列的中位數LeetCodeC++陣列
- 【LeetCode Hot 100】4. 尋找兩個正序陣列的中位數LeetCode陣列
- 用 PHP 在 力扣 刷演算法 [尋找兩個正序陣列的中位數]{有空就更}PHP力扣演算法陣列
- 【.Net】從字串陣列中尋找數字的元素字串陣列
- js如何獲取指定陣列元素在陣列中的索引值JS陣列索引
- 找一個陣列中特別的數陣列
- js如何獲取指定元素在陣列中個數JS陣列
- 153. 尋找旋轉排序陣列中的最小值(中)排序陣列
- 【Java】尋找陣列中“主要元素”Java陣列
- Algorithm 04 : 尋找兩個有序陣列中的第N個數,要求時間複雜度為O(logm+logn)Go陣列時間複雜度
- 153. 尋找旋轉排序陣列中的最小值排序陣列
- python實現給定一個數和陣列,求陣列中兩數之和為給定的數Python陣列
- 找出一堆整數中兩個元素和為指定值的所有組合
- 兩個有序陣列的中位數陣列
- 尋找陣列中第K大的元素陣列
- LintCode 尋找旋轉排序陣列中的最小值 II排序陣列
- 尋找陣列的中心索引陣列索引
- lgP5788 陣列中尋找右側第一個大於它的數陣列
- leetcode 4. Median of Two Sorted Arrays 尋找兩個正序陣列的中位數(困難)LeetCode陣列
- 演算法尋找陣列中的第二大數演算法陣列
- js查詢指定的陣列中是否含有指定的值JS陣列
- js刪除陣列元素中的指定值JS陣列
- javascript如何獲取指定元素在陣列中的數目JavaScript陣列
- 4. 兩個排序陣列的中位數排序陣列