题目:1. 两数之和
题目描述: 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素.
示例:$nums = [2,7,11,15]; $target = 9; 因为 nums[0] + $nums[1] = 2+7 = 9; 所以返回[0,1]
解答:
一种: 暴力解法
```
function sum($nums,$target){
$ind = [];
for($i = 0 ;$i < count($nums); $i++ ){
for($j = $i + 1 ; $j < count($nums) ; $j++){
if($nums[$i] + $nums[$j] == $target){
$ind = [$i,$j];
break;
}
}}
return $ind;
}
# print_r(sum($nums,$target));die;
// 第二种: 两趟查询
function mapSum($nums,$target){
foreach($nums as $k=>$v){
unset($nums[$k]);
if(in_array(($target - $v),$nums)){
return [$k,array_search(($target - $v),$nums)];
}}
}
# print_r(mapSum($nums,$target));die;
# 第三种 map方式
function mapSum1($nums,$target){
$arr = [];
foreach($nums as $k=>$v){
if(array_key_exists($target - $v,$arr)){
return [$k,$arr[$target-$value]];
}
$arr[$v] = $k;
}
return $arr;
}
# print_r(mapSum1($nums,$target));die;
```
网友评论