【leetcode100】和为k的子数组(两种解法)

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

子数组是数组中元素的连续非空序列。

示例 1:

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

输出:2

java 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        int ans=0;
        for (int l = 0; l < nums.length; l++) {
            
            int sum=0;
            for (int r = l; r<nums.length; r++) {
                sum+=nums[i];
                if (sum==k){
                    ans++;
                }
            }

        }

        return ans;
    }
}

这个题还可以进行优化,我们可以使用前缀和。我们可以使用pre前缀和。我们只需要判断前缀和里是否存在 k-pre就可以了

java 复制代码
import java.util.HashMap;

class Solution {
    public int subarraySum(int[] nums, int k) {
        int count=0,pre=0;
        //定义前缀和
        HashMap<Integer, Integer> mp = new HashMap<>();//key存放前缀和,count记录前缀和出现的次数
        mp.put(pre,1);
        for (int i = 0; i < nums.length; i++) {
            pre+=nums[i];//计算当前前缀和
            if (mp.containsKey(k-pre)){
                count+=mp.get(k-pre);//获取k-pre的前缀和出现的次数
            }
            mp.put(pre,mp.getOrDefault(pre, 0) + 1);//将该前缀出现的次数+1并放入map中
            
        }
        return count;
    }
}
相关推荐
Z9fish5 分钟前
sse哈工大C语言编程练习20
c语言·开发语言·算法
CodeCaptain6 分钟前
nacos-2.3.2-OEM与nacos3.1.x的差异分析
java·经验分享·nacos·springcloud
晓131310 分钟前
第六章 【C语言篇:结构体&位运算】 结构体、位运算全面解析
c语言·算法
iAkuya16 分钟前
(leetcode)力扣100 61分割回文串(回溯,动归)
算法·leetcode·职场和发展
梵刹古音19 分钟前
【C语言】 指针与数据结构操作
c语言·数据结构·算法
VT.馒头25 分钟前
【力扣】2695. 包装数组
前端·javascript·算法·leetcode·职场和发展·typescript
Anastasiozzzz1 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
骇客野人1 小时前
通过脚本推送Docker镜像
java·docker·容器
铁蛋AI编程实战1 小时前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
晚霞的不甘1 小时前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频