LeetCode热题100-560. 和为 K 的子数组

560. 和为 K 的子数组

中等

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

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

示例 1:

复制代码
输入:nums = [1,1,1], k = 2
输出:2

示例 2:

复制代码
输入:nums = [1,2,3], k = 3
输出:2

提示:

  • 1 <= nums.length <= 2 * 104
  • -1000 <= nums[i] <= 1000
  • -107 <= k <= 107

思路1:依旧暴力

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

思路2:前缀和

java 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        int n=nums.length,res=0;
        int[]pre = new int[n+1];//前缀和数组
        for(int i=0;i<n;i++){
            pre[i+1]=nums[i]+pre[i];
        } 
        Map<Integer,Integer> map = new HashMap<>();
        for(int t : pre){
            int s=t-k;
            if(map.containsKey(s)){
                res+=map.get(s);
            }
            map.put(t,map.getOrDefault(t,0)+1);
        }
        return res;
    }
}
相关推荐
她说..1 天前
Java 对象相关高频面试题
java·开发语言·spring·java-ee
汀、人工智能1 天前
[特殊字符] 第21课:最长有效括号
数据结构·算法·数据库架构·图论·bfs·最长有效括号
Boop_wu1 天前
[Java 算法] 字符串
linux·运维·服务器·数据结构·算法·leetcode
庞轩px1 天前
深入理解 sleep() 与 wait():从基础到监视器队列
java·开发语言·线程··wait·sleep·监视器
故事和你911 天前
洛谷-算法1-2-排序2
开发语言·数据结构·c++·算法·动态规划·图论
Fcy6481 天前
算法基础详解(三)前缀和与差分算法
算法·前缀和·差分
皮皮林5511 天前
面试官:ZSet 的底层实现是什么?
java
kvo7f2JTy1 天前
基于机器学习算法的web入侵检测系统设计与实现
前端·算法·机器学习
码云数智-大飞1 天前
C++ RAII机制:资源管理的“自动化”哲学
java·服务器·php
2601_949816581 天前
Spring+Quartz实现定时任务的配置方法
java