Leetcode560. 和为k的子数组

500 阅读1分钟

要求:

给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。

示例:

输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。

思路:

比较基础的做法吧:嵌套两次循环遍历

  1. 先把数组遍历一次,创建一个sum数组与之对应,sum[0]为0,sum[1]是前一个数的和,sum[2]是前两个数的和,依此类推,sum[n]是前n个数的和,所以sum数组的长度是nums.length+1
  2. 然后将i置为0,从0开始不断往后查找,连续子数组和为k,即sum[j]-sum[i]==k即可,所以说两层循环就够了呀。

代码:

class Solution {
    public int subarraySum(int[] nums, int k) {
        int len = nums.length;
        int[] sum = new int[len+1];
        sum[0] = 0;
        for (int i = 0; i < len; i++) {
            sum[i+1] = nums[i] + sum[i];
        }
        int count = 0;
        for (int i = 0; i < len; i++) {
            for (int j = i; j < len; j++) {
                if (sum[j+1] - sum[i] == k) {
                    count++;
                }
            }
        }
        return count;
    }
}