LeetCode刷题 - #560. 和为 K 的子数组

73 阅读1分钟

560. 和为 K 的子数组

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。

示例 1:

输入:nums = [1,1,1], k = 2
输出:2

示例 2:

输入:nums = [1,2,3], k = 3
输出:2

思路

  • 暴力解法

双重循环,第一层循环确定i,第二层循环确定j,寻找区间[i, j]和为k的解

时间复杂度: O(n²)

空间复杂度:O(1)

  • 前缀和 + 暴力解法

区间和/子数组和,想到前缀和,双重循环在前缀和数组中寻找区间和为k的解

  • 前缀和 + HashMap(待补充)

最终代码

思路二代码(前缀和+暴力解法)

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