Java 查找sum=K的子数组(连续)的数量(考虑时间复杂度)
我试图找到等于给定和K的子数组的数量。例如,当我有一个arr=[1,-1,1,-1,1]时,我创建了一个新数组,这样:Java 查找sum=K的子数组(连续)的数量(考虑时间复杂度),java,sub-array,Java,Sub Array,我试图找到等于给定和K的子数组的数量。例如,当我有一个arr=[1,-1,1,-1,1]时,我创建了一个新数组,这样: int[] s = new int[arraySize + 1]; s[0] = 0; for (int i = 1; i <= arraySize; i++) { s[i] = s[i - 1] + arr[i - 1]; } 要计算总和为K=0的子阵列,请执行以下操作:
int[] s = new int[arraySize + 1];
s[0] = 0;
for (int i = 1; i <= arraySize; i++) {
s[i] = s[i - 1] + arr[i - 1];
}
要计算总和为K=0的子阵列,请执行以下操作:
for (int i = arraySize; i > 0; i--) {
for (int j = i; j > 0; j--) {
if (subArrays[i] - subArrays[j - 1] == 0) {
counter++;
}
else {
continue;
}
}
}
这将返回正确的输出=6个可能的子数组
但是,是否有一种方法可以提高时间复杂度,使其所需时间小于O(n^2),如上述方法所示?(不使用map或hashmap)
for (int i = arraySize; i > 0; i--) {
for (int j = i; j > 0; j--) {
if (subArrays[i] - subArrays[j - 1] == 0) {
counter++;
}
else {
continue;
}
}
}