hot 100 560.和为 K 的子数组

和为 K 的子数组


问题描述

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

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


样例输入

cpp 复制代码
nums = [1,1,1], k = 2
nums = [1,2,3], k = 3

样例输出

cpp 复制代码
2
2

评测用例规模与约定

1 <= nums.length <= 2 * 10^4

-1000 <= nums[i] <= 1000

-10^7 <= k <= 10^7


解析

找到一个数组的所有子数组的和为k的数量,暴力肯定可以做到,如何优化,我们想到子数组的和可以用前缀和来表示,然后用哈希表存储和为n的子数组的数量,计算当前的前缀和 pre,检查 pre - k 是否存在于哈希表中。如果存在,说明存在若干子数组的和为 k,累加这些子数组的个数到 count,将当前前缀和 pre 存入哈希表,并增加其出现次数。最终 count 即为所有满足条件的子数组的个数。


参考程序

cpp 复制代码
class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        unordered_map<int, int> mp;
        mp[0] = 1;
        int count = 0, pre = 0;
        for (auto& x:nums) {
            pre += x;
            if (mp.find(pre - k) != mp.end()) {
                count += mp[pre - k];
            }
            mp[pre]++;
        }
        return count;
    }
};

难度等级

⭐️(1~10星)

⭐️⭐️⭐️

以个人刷题整理为目的,如若侵权,请联系删除~

相关推荐
无极低码9 小时前
ecGlypher新手安装分步指南(标准化流程)
人工智能·算法·自然语言处理·大模型·rag
软件算法开发10 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
罗超驿10 小时前
独立实现双向链表_LinkedList
java·数据结构·链表·linkedlist
superior tigre10 小时前
22 括号生成
算法·深度优先
努力也学不会java11 小时前
【缓存算法】一篇文章带你彻底搞懂面试高频题LRU/LFU
java·数据结构·人工智能·算法·缓存·面试
旖-旎12 小时前
二分查找(x的平方根)(4)
c++·算法·二分查找·力扣·双指针
ECT-OS-JiuHuaShan12 小时前
朱梁万有递归元定理,重构《易经》
算法·重构
智者知已应修善业13 小时前
【51单片机独立按键控制数码管移动反向,2片74CH573/74CH273段和位,按键按下保持原状态】2023-3-25
经验分享·笔记·单片机·嵌入式硬件·算法·51单片机
khddvbe13 小时前
C++并发编程中的死锁避免
开发语言·c++·算法