N個の正の整数の配列が与えられているとします。それは、n*(n+1)/2
サブアレイを含むことができ、単一要素サブアレイを含む。各サブアレイの合計はS
です。サブ配列の数がO(n^2)
であることから、すべてのサブ配列に対してS's
を見つけることは明らかにO(n^2)
です。多くの合計S's
も繰り返すことができます。 O(n logn)
のすべての別個の合計(正確な合計値ではなく、カウントのみ)の数を見つける方法はありますか?整数配列内のサブ配列の合計を求める
私はアプローチを試みましたが途中で固執しました。私はインデックス1からnに配列を繰り返しました。
と言いますと、a[i]
は指定された配列です。各インデックスについて、i
、a[i]
は、a[i-1]
が含まれるすべての合計に加算され、それ自体も個々の要素として含まれます。 a[i-1]
が含まれている合計のうち、2つの合計の差がa[i]
であれば、重複が出現します。つまり、合計Sp
とSq
はa[i-1]
になり、両方の違いはa[i]
となります。次にSp + a[i]
はSq
に等しく、Sq
を二重にする。
セイC[i]
は、a[i]
に終わる別個の合計のカウントです。
だからC[i] = C[i-1] + 1 - numbers of pairs of sums in which a[i-1] is involved whose difference is a[i]
です。
しかし問題は、ペア数の一部をO(log n)
に見つけることです。私にこれについてのヒントを教えてください。もし私が間違っていて、まったく別のアプローチが必要なら、それを指摘してください。
これは興味深い問題です。私が考えていることはすべて、O(n^2)という入力要素のすべてのペアを検討する必要があります。私の腸は不可能だと言っている。 – user2357112
私はO(n logn)が存在するという問題を私に与えた人によって保証されています。私は一日中考えて過ごしました。 – user2011120
明日もまだ立ち往生していない場合は、時間のかかるデモを依頼してください。 – user2357112