给定一个整数数组 nums 和一个整数目标,返回两个数字的索引,使它们相加为目标。我已经尝试了以下解决方案的一些修改版本。
function twoSum($nums, $target) {
$arr = array();
for($i = 0; $i < count($nums); $i++){
if($nums[$i] + $nums[$i+1] == $target){
array_push($arr, array_search($nums[$i], $nums), array_search($nums[++$i], $nums));
break;
}
}
return $arr;
}
当通过三个测试用例时,前两个返回正确的结果,最后一个用例返回第一个正确的索引,但最后一个索引(技术上)不正确。
使用的测试用例:
nums = [2,7,11,15], target = 9
预期输出:[0,1]
实际输出:[0,1]
nums = [3,2,4], target = 6
预期输出:[1,2]
实际输出:[1,2]
nums = [3,3], target = 6
预期输出:[0,1]
实际输出:[0,0]
您的方法不正确,因为您假设 2 个连续的索引可以导致此行中的目标值,这是不正确的。这对可以是任何组合。
$nums[$i] + $nums[$i+1] == $target
它也不考虑$i + 1
. 无论如何,其余的代码肯定会朝着错误的方向发展。
解决这个问题的步骤非常简单。
使用一个简单的关联数组,比如$set
将键存储为数组元素,将值存储为数组中该元素的索引。
现在,当循环遍历数组时,如果target - current_element
key(另一个数字)存在于 中$set
,你就得到了一对。
片段:
<?php
function twoSum($nums, $target) {
$set = [];
foreach($nums as $index => $curr_element){
$cousin_value = $target - $curr_element;
if(isset( $set[ $cousin_value ] )){
return [ $set[ $cousin_value ], $index ];
}
$set[ $curr_element ] = $index;
}
return -1;
}
print_r(twoSum([3,3],6));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句