如何解决第三个测试用例 PHP for 循环不递增
给定一个整数数组 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 = [3,3],目标 = 6
预期输出:[0,0]
解决方法
您的方法不正确,因为您假设 2 个连续的索引可以导致此行中的目标值,这是不正确的。这对可以是任意组合。
$nums[$i] + $nums[$i+1] == $target
它也不考虑 $i + 1
的索引越界异常。无论如何,其余的代码肯定会朝着错误的方向发展。
解决这个问题的步骤非常简单。
-
使用一个简单的关联数组,比如
$set
,它将键存储为数组元素,值存储为数组中该元素的索引。 -
现在,当循环遍历数组时,如果
target - current_element
键(另一个数字)存在于$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));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。