两数之和
给定一个整数数组
nums
和一个目标值target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
方法一:暴力法(php)
class Solution {
/**
* @param Integer[] $nums
* @param Integer $target
* @return Integer[]
*/
function twoSum($nums, $target) {
$count = count($nums);
for ($i=0; $i<$count-1; $i++) {
for ($j=$i+1; $j<$count; $j++) {
if(($nums[$i] + $nums[$j]) == $target ){
return array($i,$j);
break;
}
}
}
}
}
时间复杂度:O(n^2)
空间复杂度:O(1)
方法二:数组查找(php)
class Solution {
/**
* @param Integer[] $nums
* @param Integer $target
* @return Integer[]
*/
function twoSum($nums, $target) {
$count = count($nums);
for ($i=0; $i<$count-1; $i++) {
$tmp = $target - $nums[$i];
$newnums = $nums;
unset($newnums[$i]);
$res = array_search($tmp, $newnums);
if ($res !== false) {
return array($i,$res);
break;
}
}
}
}
本来想用哈希表遍历,时间复杂度能降到O(n),但是没找到php实现的方法,最后用了array_search函数,比方法一稍微好一点,还可以继续优化
还不快抢沙发