第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 如果沒有排好序可以使用...