入力:
予想される複雑さ:
O(n)
O(1)
例:
入力:
arr = {2,3,17,30}
x=10
予想される行動:
この関数はインデックスを出力します:1,2(3 + 17)/ 2 = x = 10なので、trueを返します
入力:
x = 30
予想される行動:
(30)/1
= x = 30`なので、関数はインデックス3を出力し、trueを返します。
アルゴリズムへの私のアプローチ:
配列の最初の要素から始まる算術平均を取ります。xが結果よりも大きい場合は、配列内の次の要素を算術平均に追加します。それ以外の場合は、最初の要素を算術平均から減算します。
試してみましたが、うまくいきませんでした。誰か助けてもらえますか?
kが配列の長さに達した場合、解決策はありません。そうでなければ、あなたは解決策を持っています。ステップ3のように複雑さO(n)は、前の合計+ ak +1がk * targetよりも大きかったため、1つの数値のみを追加し、左の境界線はn回しか移動できません。
1. proc(array, x):
2. sum = 0;
3. left = 0;
4. right = 0;
5. do:
6. sum += array[right];
7. right++;
8. while (sum+array[right] <= (right+1)*target && right<array.size);
9. if (sum == right*target):
10. for (i = left; i < right; i++):
11. print(array[i] + <sep>);
12. end_for
13. return;
14. end_if
15. while (left <= right):
16. if (right<array.size): sum += array[right++];
17. do:
18. sum-=array[left++]
19. while (sum > target*(right-left));
20. if (sum == target*(right-left)):
21. for (i = left; i < right; i++):
22. print(array[i] + <sep>);
23. end_for
24. return;
25. end_if
26. end_while
27.end_proc
すべての数値が正の配列に対して適切に機能します。ネガには小さな変更が必要ですが、インタビューでは、すべての数値がポジティブの配列についてよく尋ねられます。適切な解決策がない場合は、いくつかの追加のエスケープ条件が必要になる場合があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加