この質問は素晴らしいYouTubeチャンネルからのもので、インタビューで尋ねることができる問題を与えています。
これは基本的に、配列内のバランスポイントを見つけることに関連しています。これを最もよく説明する例を次に示します。{1,2,9,4、-1}。ここでは、sum(1 + 2)= sum(4 +(-1))であるため、9がバランスポイントになります。答えを確認せずに、より効率的なアプローチを実行できるかどうかを尋ねる前に、アルゴリズムを実装することにしました。
- 配列O(n)のすべての要素を合計します
- 合計の半分を取得するO(1)
- 配列のスキャンを左から開始し、sumleftが一般的な合計の半分より大きくなったら停止します。の上)
- 合計 の権利を取得するには、権利についても同じことを行います。O(n)。
- sumleftがsumrightと等しい場合はarr[size/ 2]を返し、そうでない場合は-1を返します。
このソリューションが何の努力もせずに頭に浮かび、O(n)の実行時間を提供したので、私は尋ねています。このソリューションは、真の場合は開発できますか、それとも真でない場合は別の方法がありますか?