如何在陣列中找到和為 「特定值」 的三個數?

2022-09-05 03:51:11 字數 837 閱讀 4286

第1輪,訪問陣列的第1個元素1,把問題轉化成從後面元素中找出和為12(13-1)的兩個數。

如何找出和為12的兩個數呢?我們設定兩個指標,指標j指向剩餘元素中最左側的元素2,指標k指向最右側的元素12:

計算兩指標對應元素之和,2+12 = 14 > 12,結果偏大了。

由於陣列是按照公升序排列,k左側的元素一定小於k,因此我們把指標k左移一位:

計算兩指標對應元素之和,2+9 = 11< 12,這次結果又偏小了。

j右側的元素一定大於j,因此我們把指標j右移一位:

計算兩指標對應元素之和,3+9 = 12,正好符合要求!

因此我們成功找到了一組匹配的組合:1,3,9,已此類推遍歷完整個陣列

/**

* 使用雙指標法

**/function threesum(array $nums,$target)

if($j == $k)

if($nums[$j] + $nums[$k] == $d)}}

return $resultlist;

}print_r(threesum([5,12,6,3,9,2,1,7],13));

如何在給定的整數陣列中找到重複的數字

最先湧現的想法是遍歷一遍陣列,用hash表記錄每乙個數字出現的次數 用空間換時間 劍指offer解法 重新排序陣列每個數字,當掃瞄到數字m的時候判斷下標為i的數字是否等於m 如果是,就尋找下乙個 如果不是,就判斷下標為m的對應的數字是否等於m,如果它與第m個數字相等,就等於找到了乙個重複的數字,如果...

從乙個陣列中找到和為定值的兩個數

問題 從乙個陣列中,找出兩個數,使其和滿足一定的值sum。演算法的本質,就是構造解空間,然後根據解的特點,把不符合條件的解從中去掉。就這個問題而言,我們從陣列中取出乙個數,那麼我們如何判斷這個數是不是兩個數之一呢?很明顯,以現在的情況,還不能否定這個數,那麼怎麼辦?假設,我告訴你,這是這根陣列中最小...

在陣列中尋找和為指定值的兩個數

題目 在陣列中尋找和為指定值的兩個數,如arr 指定值sum為12,返回4 8 12 方法1 採用暴力破解 即窮舉 時間複雜度為o n n 即對每乙個數arr i 搜尋sum arr i 在不在陣列中。方法2 根據方法1,如果陣列已經排好序,可以使用二分查詢sum arr i 如果沒有排好序可以使用...