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