问题描述
我试图找到等于给定总和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];
}
哪个给我:
s[0] = 0
s[1] = arr[0]
s[2] = arr[0] + arr[1]
s[3] = arr[0] + arr[1] + arr[2]
s[4] = arr[0] + arr[1] + arr[2] + arr[3]
s[5] = arr[0] + arr[1] + arr[2] + arr[3] + arr[4]
要计算总计为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)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)