尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

算法日常・每日刷题--<前缀和>4

发布时间:2026/9/1 6:41:39

资讯中心
01
ARTICLE

算法日常・每日刷题--<前缀和>4

算法日常・每日刷题--<前缀和>4
560. 和为 K 的子数组 - 力扣LeetCode560. 和为 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 107https://leetcode.cn/problems/subarray-sum-equals-k/因为存在0和负数,用滑动窗口也是不能解决的我们接下来想想前缀和能不能解决问题在于dp数组怎么使用来获得?dp是计算前缀和,那么我们可以用在前面dp数组中,有没有dp[i]-k的值,但是在找那个值的时候选择简单在遍历一遍表和暴力解法没有区别,此时我们可以用哈希表来记录值,这样可以不用遍历.注意点1.当dp[i] k时find dp[i] - k 0如果没有0就统计不到从头开始的子数组2.hash表插入的时机,应该在数据检索一遍后插入,而不是之前就插入.#includeunordered_map class Solution { public: int subarraySum(vectorint nums, int k) { int nnums.size(); vectorint dp(n); dp[0]nums[0]; for(int i1;in;i) { dp[i]dp[i-1]nums[i]; } unordered_mapint,int hash; int count0; //要处理k为o刚好dp[i]k的情况 hash[0]1; for(int i0;in;i) { int finddp[i]-k; if(hash.count(find)0) countcounthash[find]; hash[dp[i]]; } return count; } };
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。