167. Two Sum II - Input array is sortedphp
給定一個已經排序好的整數數組,從中尋找兩個數字,使其相加以後等於給定的一個數字。數組
返回這兩個數字對應的下標。.net
首先想到的思路固然是逐個遍歷,可是會超時。就不細說了。code
以後想到的是用二分法找到小於目標數字的位置,用以減小遍歷次數。排序
最後想到的是,把給定數組倒轉過來,用isset去搜索是否存在指定加數。ip
<?php class Solution { /** * @param Integer[] $numbers * @param Integer $target * @return Integer[] */ function twoSum($numbers, $target) { $repeatItems = array_filter(array_count_values($numbers),function($v){ return $v>1; }); $vs = array_flip($numbers); foreach($vs as $k => $v){ if(isset($vs[$target-$k])){ if(isset($repeatItems[$target-$k])){ return [$v, $v+1]; } return [$v+1, $vs[$target-$k]+1]; } } return [null, null]; } }
若以爲本文章對你有用,歡迎用愛發電資助。leetcode