2016-10-30 12 views
0

正の整数aと整数kの配列が与えられているので、私は最長のサブアレイの長さを与えるアルゴリズムを見つけようとしています。 より小さいか等しいからk。私はO(n^2)時にそれを解決する方法を考え出しましたが、できる限りO(n)に近いところで解決しようとしています。合計がkより小さい最長サブアレイ

O(n)のソリューションでは、開始インデックスと終了インデックスを作成しようとしていますが、これでウィンドウが表示されます。このウィンドウの長さが最後に記録された長さより大きい場合、このウィンドウ内の合計が< = k ANDであるかどうかをチェックしたいと思います。しかし、それを入力するとき、私の論理は壊れます。

+0

場合によっては、1つの「i」に対して開始点を複数回移動する必要があります。だから、あなたの 'else'ケース本体を' while(sum> k) 'でラップしてみてください。 – Gassa

+2

私は非常によく見ていませんが、一見したところでは、あなたは決してmaxLenに何も割り当てないことを示しています。私は 'currLen = maxLen'が後方にあると推測しています。あなたはデバッガと簡単なテストケースを使ってみましたか? – The111

+1

maxLenは更新されず、毎回0として出力されるようです。私は最大長と合計<= kの両方をチェックする必要があるので、私は少し問題があります。 – FlameDra

答えて

1

は、私はあなたが私はあなたの問題のその部分を考えていませんが、あなたはendを使用していないと私はそれが正しく更新されないと思う

maxLen = currLen; 

を意味すると思います。ただそれを削除します。

+0

修正されました。 – FlameDra

関連する問題