当前位置: 首页 > news >正文

leetcode0560. 和为 K 的子数组-medium

1 题目:和为 K 的子数组

官方标定难度:中

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

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

示例 1:

输入:nums = [1,1,1], k = 2
输出:2

示例 2:

输入:nums = [1,2,3], k = 3
输出:2

提示:

1 < = n u m s . l e n g t h < = 2 ∗ 1 0 4 1 <= nums.length <= 2 * 10^4 1<=nums.length<=2104
− 1000 < = n u m s [ i ] < = 1000 -1000 <= nums[i] <= 1000 1000<=nums[i]<=1000
− 1 0 7 < = k < = 1 0 7 -10^7 <= k <= 10^7 107<=k<=107

2 solution

本题需要反复计算区间和,所以用前缀和——减法代替区间求和。还需要反复验证有没有连个数的差是否是目标数,所以可以用 hashmap 。

代码

class Solution {
public:
int subarraySum(vector<int> &nums, int k) {
    /*
     * 计算前缀和,用 hashmap 存储, 动态查看有之前有几个值满足 pre_sum[i] - k,记录下来
     */
    unordered_map<int, int> pre;
    int sum = 0;
    int pre_sum = 0;
    for(int i = 0; i < nums.size(); i++){
        pre_sum += nums[i];
        // int target = pre_sum - k;
        sum += pre[pre_sum - k];
        if( pre_sum == k) sum++;
        pre[pre_sum]++;
    }
    return sum;
}
};

结果

在这里插入图片描述

相关文章:

  • fatal: Unable to create /.git/index.lock‘: File exists.
  • WRC世界机器人大会-2024年展商汇总
  • 可发1区的创新思路:​基于K-means聚类的EMD-BiLSTM-CNN-Attention时间序列预测模型(功率预测、寿命预测、流量预测、故障诊断)
  • 链表相关知识总结
  • HTML:form表单简单介绍
  • 神经网络监督、半监督、无监督学习解析
  • 基于springboot的星之语明星周边产品销售网站(050)
  • LeetCode热题100精讲——Top3:最长连续序列【哈希】
  • 数的划分(dfs)
  • OpenCV图像拼接项目指南
  • 健康养生:铺就活力生活之路
  • CMake-环境变量介绍
  • 第42章:Secret管理与敏感信息保护
  • 2.go基础语法
  • wpf 后台使用图标字体
  • 快速创建 Java 8 兼容的 Spring Boot 项目(阿里云脚手架)
  • 【模拟面试】计算机考研复试集训(第十三天)
  • wordpress主题使用中常见错误汇总
  • 第二十一章:模板与继承_《C++ Templates》notes
  • MyBatis-Plus(Ⅱ)基本CRUD
  • 软硬件企业集中发布未成年人模式使用手册
  • 许峰已任江苏省南京市副市长
  • 安徽省公安厅原副厅长刘海石主动投案,正接受审查调查
  • 成都世运会倒计时100天,中国代表团运动员规模将创新高
  • 宁夏民政厅原厅长欧阳艳已任自治区政府副秘书长、办公厅主任
  • 法院为“外卖骑手”人身权益撑腰:依法认定实际投保人地位