【前缀和】560. 和为 K 的子数组

560. 和为 K 的子数组

解题思路

  • 创建一个前缀和数组 preSum,其长度比原数组 nums 多 1。preSum[i] 表示 nums 中前 i 个元素的和。
  • 通过遍历 nums 数组,计算前缀和数组 preSum。
    • 在嵌套的两个循环中,对所有可能的子数组进行穷举:
    • 外层循环从 1 到 n(n 是数组长度),代表子数组的结束位置。
    • 内层循环从 0 到 i-1,代表子数组的起始位置。
  • 在每一对起始位置和结束位置上,通过计算前缀和数组中的差值,判断子数组的和是否等于 k。
  • 如果等于 k,则将结果计数器 ans 加一。
java 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        // 前缀和数组
        int n = nums.length;
        int[] preSum = new int[n + 1]; 
        preSum[0] = 0;

        for(int i = 0; i < n; i++){
            preSum[i + 1] = preSum[i] + nums[i];
        }

        // preSum[i] 代表nums[0...i - 1]的和

        int ans = 0;
        // 穷举所有子数组
        for(int i = 1; i <= n; i++){
            for(int j = 0; j < i; j++){
                if(preSum[i] - preSum[j] == k){
                    ans++;
                }
            }
        }


        return ans;
    }
}
相关推荐
懂AI的老郑2 分钟前
深入理解C++中的堆栈:从数据结构到应用实践
java·数据结构·c++
智算菩萨4 分钟前
音乐生成模型综述:从符号作曲到音频域大模型、评测体系与产业化趋势
人工智能·深度学习·算法
晚风(●•σ )6 分钟前
C++语言程序设计——12 排序算法-桶排序
c++·算法·排序算法
kgduu6 分钟前
Gin源码解析
算法·gin
淀粉肠kk8 分钟前
【数据结构】哈希表
数据结构·c++
小尧嵌入式23 分钟前
C++11线程库的使用(上)
c语言·开发语言·c++·qt·算法
蓝色汪洋31 分钟前
luogu填坑
开发语言·c++·算法
小年糕是糕手1 小时前
【C++同步练习】类和对象(三)
开发语言·jvm·c++·程序人生·考研·算法·改行学it
jllws11 小时前
数据结构_输入法的实现&五笔输入法浅析
数据结构
Learner__Q1 小时前
每天五分钟:leetcode动态规划-递归与递推_day2
算法·深度优先