力扣 hot100 和为K的子数组 哈希&前缀和

题目链接:

560. 和为 K 的子数组 - 力扣(LeetCode)

题目描述:

给你一个整数数组 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

我的思路:

我们可以创建一个哈希表来记录每一个前缀和的出现次数,然后通过当前前缀和来减k得到数和哈希表的数来对比,如果哈希表也有这个数,说明之前有前缀和可以和当前的前缀和相减可以得到k,所以答案加上当前前缀和-k得到的哈希映射的个数,也就是numQ - numO = k中numO的个数

我的代码:

java 复制代码
class Solution {
        public int subarraySum(int[] nums, int k) {

            HashMap<Integer, Integer> integerIntegerHashMap = new HashMap<>();
            integerIntegerHashMap.put(0,1);
            int ans=0;
            int numQ=0;

            for (int num : nums) {

                numQ += num;

                if (integerIntegerHashMap.containsKey(numQ - k)) {
                    ans += integerIntegerHashMap.get(numQ - k);
                }

                integerIntegerHashMap.put(numQ, integerIntegerHashMap.getOrDefault(numQ, 0) + 1);

            }

            return ans;

        }
    }
相关推荐
敲个大西瓜1 小时前
Spring Could Alibaba 核心面试题
java·后端·spring
骇客野人1 小时前
Java SSO 统一认证方案
java·开发语言
START_GAME1 小时前
MSSQL$SQL2016
java·服务器·前端
疯狂打码的少年1 小时前
【数据结构】图的遍历:深度优先搜索(DFS)
数据结构·笔记·算法·深度优先
ydd1001001 小时前
字符串转换整数
java
会编程的吕洞宾2 小时前
DeepAgents In Action学习(Second)
android·java·学习
梦梦代码精2 小时前
基于UniApp+Vue3+ThinkPHP 8,这套知识付费系统的架构设计有点东西
java·低代码·docker·uni-app·开源·php
-凌凌漆-2 小时前
【freertos】Task创建(v2)
java·开发语言·算法
牛油果子哥q2 小时前
C++内存模型与深浅拷贝万字详解:栈堆静态内存布局、深浅拷贝底层差异、内存泄漏根治、拷贝崩溃踩坑、手写深拷贝实战
java·开发语言·c++