找到总和= 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 (将#修改为@)