首页 > 解决方案 > 如果求和时任一侧的单个数组中的值相等,则查找索引

问题描述

我有一个白板问题,我认为这超出了我的技能范围,所以我什至不知道如何解决这个问题。

我想遍历每个值并对左侧/右侧的元素求和,如果它们相等则返回索引值。

所以:

[1, 2, 3, 4, 3, 2, 1]; // return 3

官方问题:

您将获得一个整数数组。您的工作是获取该数组并找到一个索引 N,其中 N 左侧的整数之和等于 N 右侧的整数之和。如果没有索引会导致这种情况发生,请返回 - 1.

有没有好心人帮帮我?我已经看过array_map()并且array_filter()虽然有帮助,但我想不出在迭代数组时如何在当前索引之间来回遍历。

标签: phparrays

解决方案


这可以通过一个简单的 for 循环来完成,该循环在数组的整个范围内与array_sliceand结合使用array_sum

function doSomething(array $data): int {
    for ($i = 0, $count = count($data); $i < $count; $i++) {
        $left = $i > 0 ? array_slice($data, 0, $i) : [ $data[0] ];
        $right = $i > 0 ? array_slice($data, $i + 1) : $data;
    
        $left_result = array_sum($left);
        $right_result = array_sum($right);
    
        if ($left_result === $right_result) {
            return $i;
        }
    }

    return -1;
}

这段小代码循环遍历整个数组,并将数组当前位置的左右相加。将比较结果,如果结果相同,则返回数组的键。

yield对于大型数组,您可以尝试使用 a或Iterator实例来减少内存消耗。


推荐阅读