Учитывая массив целых чисел и диапазон (низкий, высокий), найдите все непрерывная подпоследовательность в массиве с суммой в диапазоне.
Существует ли решение лучше, чем O (n ^ 2)?
Я много пробовал, но не смог найти решение, которое лучше, чем O (n ^ 2). Пожалуйста, помогите мне найти лучшее решение или подтвердить, что это лучшее, что мы можем сделать.
Это то, что я имею прямо сейчас, я предполагаю, что диапазон будет определен как [lo, hi]
.
public static int numOfCombinations(final int[] data, final int lo, final int hi, int beg, int end) {
int count = 0, sum = data[beg];
while (beg < data.length && end < data.length) {
if (sum > hi) {
break;
} else {
if (lo <= sum && sum <= hi) {
System.out.println("Range found: [" + beg + ", " + end + "]");
++count;
}
++end;
if (end < data.length) {
sum += data[end];
}
}
}
return count;
}
public static int numOfCombinations(final int[] data, final int lo, final int hi) {
int count = 0;
for (int i = 0; i < data.length; ++i) {
count += numOfCombinations(data, lo, hi, i, i);
}
return count;
}