微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

第三个测试用例 PHP for 循环不递增

如何解决第三个测试用例 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;
}

当通过三个测试用例时,前两个返回正确的结果,最后一个用例返回第一个正确的索引,但最后一个索引(技术上)不正确。

使用的测试用例:

  1. nums = [2,7,11,15],目标 = 9
    预期输出:[0,1]
    实际输出:[0,1]

  2. nums = [3,2,4],目标 = 6
    预期输出:[1,2]
    实际输出:[1,2]

  3. 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 举报,一经查实,本站将立刻删除。