【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;
    }
}
相关推荐
怦怦蓝5 小时前
详解 IntelliJ IDEA 中编写邮件发送功能(从环境搭建到实战落地)
java·spring boot·intellij-idea
DENG8623045 小时前
二、使用idea运行Quarkus项目及调试
java·intellij-idea·quarkus
冰冰菜的扣jio5 小时前
Redis高级数据结构
数据结构·redis·bootstrap
zd8451015005 小时前
stm32f407 电机多轴联动算法
stm32·单片机·算法
sww_10266 小时前
Spring AI Structured-Output源码分析
java·人工智能·spring
IT_Octopus6 小时前
java 实体属性 Map 解决 mybatis-plus wrapper selectone 查mysql json类型为null 问题
java·mysql·mybatis
代码游侠6 小时前
应用——Linux FrameBuffer图形显示与多线程消息系统项目
linux·运维·服务器·开发语言·前端·算法
Eloudy6 小时前
矩阵张量积(Kronecker积)的代数性质与定理
算法·量子计算
我的golang之路果然有问题6 小时前
Docker 之常用操作(实习中的)
java·运维·笔记·docker·容器·eureka