LeetCode Hot100_560. 和为k的子数组

题目链接:https://leetcode.cn/problems/subarray-sum-equals-k/?envType=study-plan-v2&envId=top-100-liked

暴力解法:
第一层循环左边界,第二层循环有边界,sum一直加,加到等于target就让cnt++。

public class Solution {

    public int subarraySum(int[] nums, int k) {
        int count = 0;
        int len = nums.length;
        for (int left = 0; left < len; left++) {
            int sum = 0;
            for (int right = left; right < len; right++) {
                sum += nums[right];
                if (sum == k) {
                    count++;
                }
            }
        }
        return count;
    }
}

前缀和解法:
原来前缀和就是把i之前的数加起来哇,学会了

class Solution {
    public int subarraySum(int[] nums, int k) {
        int len = nums.length;
        int[] preSum = new int[len+1];
        int cnt = 0;
        preSum[0] = 0;
        for(int i = 1;i <= len;i++){
            preSum[i] = preSum[i-1] + nums[i-1];
        }

        for(int i = 0;i < len;i++){
            for(int j = i;j < len;j++){
                if(preSum[j+1]-preSum[i] == k){
                    cnt++;
                }
            }
        }
        return cnt;
    }
}
posted @ 2025-02-20 09:23  烟雨化飞龙  阅读(16)  评论(0)    收藏  举报