php - 如果求和时任一侧的单个数组中的值相等,则查找索引
问题描述
我有一个白板问题,我认为这超出了我的技能范围,所以我什至不知道如何解决这个问题。
我想遍历每个值并对左侧/右侧的元素求和,如果它们相等则返回索引值。
所以:
[1, 2, 3, 4, 3, 2, 1]; // return 3
官方问题:
您将获得一个整数数组。您的工作是获取该数组并找到一个索引 N,其中 N 左侧的整数之和等于 N 右侧的整数之和。如果没有索引会导致这种情况发生,请返回 - 1.
有没有好心人帮帮我?我已经看过array_map()
并且array_filter()
虽然有帮助,但我想不出在迭代数组时如何在当前索引之间来回遍历。
解决方案
这可以通过一个简单的 for 循环来完成,该循环在数组的整个范围内与array_slice
and结合使用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
实例来减少内存消耗。
推荐阅读
- ios - 是否可以从自动填充扩展 (ASCredentialProviderViewController) 记录 Firebase 分析事件?
- c++ - 如何在没有显式比较对象的情况下从 Container 对象构造 std::priority_queue 的实例?
- mysql - 将同一张表的数据与新旧解析器进行比较
- java - 有没有办法在 Rhapsody 中调试 IBM Rhapsody 插件?
- docker - 更改 dunglas symfony-docker 的端口
- python - 想使用python从csv文件中提取特定行
- firebase - 如何将数据从firebase数据库写入excel或.txt文件android studio
- javascript - 如何使用 1 knex 脚本创建整个数据库的迁移?
- pandas - 根据结果,如何删除箱线图顶部上方的数据?
- c - 将字符串转换为大写时出现分段错误