ホワイトボードの質問がありますが、自分のスキルをはるかに超えていると思うので、これにアプローチする方法すらわかりません。
各値を繰り返し処理し、左側/右側の要素を合計して、それらが等しい場合はインデックス値を返します。
そう:
[1, 2, 3, 4, 3, 2, 1]; // return 3
公式の質問:
整数の配列が与えられます。あなたの仕事は、その配列を取得して、Nの左側の整数の合計がNの右側の整数の合計に等しいインデックスNを見つけることです。これを実現するインデックスがない場合は、-を返します。 1.1。
誰かが私を助けるのに十分親切ですか?私が見てきたarray_map()
とarray_filter()
し、便利ながら、私は前後に現在のインデックス反復配列の間で行き来する方法を考えることはできません。
これは、array_slice
とを組み合わせた配列の全範囲にわたる単純なforループで実行できます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
またはIterator
インスタンスを使用してメモリ消費を削減することができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加