如何解决找到总和= K的子数组连续的数量考虑时间复杂度
我试图找到等于给定总和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 举报,一经查实,本站将立刻删除。