2

size の int の配列が与えられた場合t、中心のインデックスを見つける必要があります。中央xのインデックスは、int (0 から x-1) の合計が合計 (x+1 から t-1) に等しいインデックスです。

私が思いつく最高のアルゴリズムは O(n) です。

以前のすべてのintの合計を含む一時配列があります(インデックスxのものは含まれません):したがって、インデックス1では1になり、2では2と1の合計になります。

別の int は、すべての int の合計になります。

配列を 2 回ループして、最初に一時配列を作成し、もう 1 回で両方の部分が等しいかどうかを調べます。

より良いアルゴリズム O(logn) はありますか?

4

1 に答える 1

3

配列の半分の両方の合計を計算する必要があるため、これは 未満では解決できませんO(n)。(合計を計算するために)各要素を少なくとも1回検査する必要があるためです。lognここでは不可能な条件に基づいて、配列の特定の要素の検査をスキップできる場合にのみ、任意のアルゴリズムを使用できます。

于 2012-10-19T15:07:39.577 に答える