【Hot100】LeetCode—560. 和为 K 的子数组

目录

  • [1- 思路](#1- 思路)
  • [2- 实现](#2- 实现)
    • [⭐560. 和为 K 的子数组------题解思路](#⭐560. 和为 K 的子数组——题解思路)
  • [3- ACM 实现](#3- ACM 实现)


1- 思路

前缀和

  • ① 借助 HashMap 存储前缀和:Key 为对应的前缀和,Value 为对应的出现次数
    • hm 初始化放入 (0,1) 代表和为 0 的情况出现 1
  • ② 定义 pre 求解前缀和
  • ③ 遍历数组

问题转换

  • 利用前缀和的特性,求 [i..j] 中的元素和,相当于数组和
    • 想要求 [j..i] 区间的和相当于利用 prefixSum[i] - prefixSum[j-1] = k
    • 移项可得,满足 prefixSum[i] - k = prefixSum[j-1] 即可
  • 已有: kprefixSum[i]------> 求是否存在 prefixSum[j-1],存在即可加上该值

2- 实现

⭐560. 和为 K 的子数组------题解思路

java 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        HashMap<Integer,Integer> map = new HashMap<>();
        map.put(0,1);
        int res = 0;
        int prefixSum=0;

        for(int num:nums){
            prefixSum += num;
            if(map.containsKey(prefixSum-k)){
                res += map.get(prefixSum-k);
            }
            map.put(prefixSum,map.getOrDefault(prefixSum,0)+1);
        }

        return res;
    }
}

3- ACM 实现

java 复制代码
public class subArrayLength {


    public static int subLen(int[] nums,int k){
        //1.数据结构
        HashMap<Integer,Integer> hm = new HashMap<>();
        int res = 0;
        int prefixSum = 0;
        hm.put(0,1);
        for(int num:nums){
            prefixSum+=num;
            if(hm.containsKey(prefixSum-k)){
                res+=hm.get(prefixSum-k);
            }
            hm.put(prefixSum,hm.getOrDefault(prefixSum,0)+1);
        }
        return res;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入数组长度");
        int n = sc.nextInt();
        int[] nums = new int[n];
        for(int i = 0 ; i < n ;i++){
            nums[i] = sc.nextInt();
        }
        System.out.println("输入k");
        int k = sc.nextInt();
        System.out.println("结果是"+subLen(nums,k));
    }
}

相关推荐
zzh___zzh9 分钟前
Spring Boot资源路径与ClassPathResource详解
java
foundbug99914 分钟前
Polar Code 编解码 MATLAB 实现
开发语言·算法·matlab
学渣超18 分钟前
微服务日志智能诊断系统(八) 全链路追踪——request_id驱动的跨服务诊断
java·后端·agent
ACGkaka_20 分钟前
Spring Boot 实战(四十一):集成 BPMN(Flowable+bpmn-js)
java·spring boot·后端
李小小钦21 分钟前
D. Storming Arasaka(Codeforces 2238)
c语言·开发语言·数据结构·c++·算法
学渣超31 分钟前
微服务日志智能诊断系统(九) 让 LLM 成为日志分析专家
java·后端·agent
技术不好的崎鸣同学34 分钟前
[ACTF2020 新生赛]Include 思路及解法
算法·安全·web安全
学渣超37 分钟前
微服务日志智能诊断系统(七) 日志 RAG 引擎——蒸馏、索引与精准检索
java·后端·agent
掉鱼的猫39 分钟前
代码审查 Agent Harness 实战:AI 自动 Code Review
java·llm·agent
先吃饱再说40 分钟前
一篇吃透树的遍历:递归与迭代的完整拆解
数据结构·算法