0
配列から最大部分文字列を数え、合計と開始点と終了点を返すコードを作成しようとしています。しかし、私はそこにいくつかのエラーがありますが、例えば、私がArray(-2, 1, -3, 4, -1, 2, 1, -5, 4)
をソースとして使用した場合、返信が(7, 5,8)
になるため、私は見つけられません。ただし、正解は(6, 3, 6)
である必要があります。以下のコード。動的スタイルを使用するMaxSubArray
def solve(a: Array[Int]): (Int, Int, Int) = {
require(a.nonEmpty)
val n = a.length
val temp = Array.fill(n)(0, 0, 0)
var max = (0,0,0) // sum, start, end
for (i <- 0 to n-1) {
temp(i) = (a(i), i, i)
}
for (i <- 0 to n-1) {
for (j <- 0 to i) {
if (a(i) > a(j) && temp(i)._1 < temp (j)._1 + a(i)) {
temp(i) = (temp(j)._1 + a(i), j, i)
}
}
}
for (i <- 0 to n-1){
if (max._1 < temp(i)._1){
max = temp(i)
}
}
return max
}
ソリューションは少なくとも立方体ではありませんか? –
私はそれを最適化しようとはしませんでしたが、ソリューションを直接的に表現するためだけでした。実際、上記の@jwvhの解は同じ複雑さであり、我々は同じO(n^2)個の部分列を生成し、それぞれを独立して合計する。 ここに追加できる最適化ポイントはたくさんありますが、それは正しい答えを得ることから始まります。 – Iadams
正しい答えを得ることは絶対に自明です。 O(n)時間に正解を得ることは、この問題の原因です。 O(n^2)は、最適化について考えることができる出発点です。それより悪いことは、/ dev/nullにまっすぐ進むかもしれません。 –