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

LeetCode和为k的字数组(560题)

题目展示

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

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

示例 1:

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

示例 2:

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

题目地址:560. 和为 K 的子数组 - 力扣(LeetCode)

相关类型题目(进阶):2588. 统计美丽子数组数目 - 力扣(LeetCode)

解题思路

首先我们需要搞懂的一个点: 一组数据的和为10 那么我们的目标和也刚好为10 那么这组数据就是满足题目的子数组.

然后我们在延展一下:一组数据和为20 目标和为15 但是这组数据中前二个元素和为5 即我们这组数据将前二个数据剔除,剩下的即为满足的子数组.

代码演示:

class Solution {
    public int subarraySum(int[] nums, int k) {

        int count = 0; // 用来统计和为k的子数组总数
        int sum = 0; // 前缀和

        Map<Integer, Integer> map = new HashMap<Integer, Integer>(nums.length + 1); // 用来统计前缀和的集合

        map.put(0, 1); // key:前缀和 值:出现次数 map.merge(sum,1,Integer::sum); 这行代码会让他变增

        for (int num : nums) {
            sum += num; //计算前缀和
            count += map.getOrDefault(sum - k, 0); 
// 难点:map.getOrDefault(sum - k, DefaultValue) 
//map中getOrDefault方法作用为: 如果有sum-k键返回键值否则返回DefaultValue

            map.merge(sum, 1, Integer::sum); 
// map中的merge 存在sum键 在原值基础上+1 否则 sum键值为1
        }

        return count;
    }
}

相关文章:

  • 【hello git】git 扫盲(add、commit、push、reset、status、log、checkout)
  • C语言学习笔记:初阶指针
  • 在 Maven 中使用 <scope> 元素:全面指南
  • “深入浅出”系列之Linux篇:(10)基于C++实现分布式网络通信RPC框架
  • 软件开发工程师与AI工具
  • MySQL字段内容加解密使用性能验证
  • Linux学习记录1
  • Manus AI Agent介绍总结
  • js正则表达式--标识符(6)
  • 浏览器WEB播放RTSP
  • 键值对(C++实现)
  • 鸿蒙应用开发深度解析:API 14核心特性与实战指南
  • C++ Primer Plus 编程练习题 第三章 处理数据
  • 某得物 - WebView App H5调试
  • dataframe能否把列表里所有的NaN换成列表上一位的数字?
  • 蓝桥杯备考:动态规划路径类dp之迷雾森林
  • ubuntu 20.04下ZEDmini安装使用
  • 【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JSP 中的内置对象:request、response、session 的使用示例
  • C++11新特性:auto遇上const时的推导规则
  • blender看不到导入的模型
  • 怎么自己做一个公众号/厦门百度seo点击软件
  • 双桥网站建设/nba排名2021最新排名
  • 网站制作哪些公司制作/怎么找推广渠道
  • 网站建设放入什么会计科目/站长网站大全
  • 自己做网站的流程下载/seo服务外包费用
  • 建设官方网站的请示/网络营销专业学什么课程