文章目录

  • 题目描述
  • 思路 & 代码
    • 暴力法 O(n2n^2n2)
    • 前缀和 + 哈希表 O(n)
    • 二刷

题目描述

  • 第一道前缀和题目~

思路 & 代码

暴力法 O(n2n^2n2)

  • 固定一个值,从后往前找满足的条件即可
class Solution {public int subarraySum(int[] nums, int k) {int ans = 0;for(int i = 0; i < nums.length; i++){int temp = 0;for(int j = i; j >= 0; j--){temp += nums[j];if(temp == k){ans++;}}}return ans;}
}

前缀和 + 哈希表 O(n)

  • 连续子数组值 = preNum[j] - preNum[i],很巧妙
  • 一次遍历动态哈希,一边维护一边找~
class Solution {public int subarraySum(int[] nums, int k) {// 前缀和 & 哈希表(前缀和值 - 出现次数)Map<Integer, Integer> hashmap = new HashMap<>();// 代表第一个元素的前缀和,初始化hashmap.put(0, 1);int preSum = 0;int ans = 0;for(int num : nums){preSum += num;// 如果之前有满足的前缀和(注意是 preSum - k)if(hashmap.containsKey(preSum - k)){ans += hashmap.get(preSum - k);}// 维护哈希表hashmap.put(preSum, hashmap.getOrDefault(preSum, 0) + 1);}return ans;}
}

二刷

  • 才发现对前缀和这个概念不是很熟悉…
  • 说实话我觉得这题代码相对抽象,有必要用点简单例子人脑走一遍:
  • 比如 map.put(0, 1) 这一行(比如[1, 1], 2。没有这一行就直接得 0 了)
  • (虽然图片有点丑,但是请勉强看看吧 = = )
  • 这么个意思,累加 sum,如果发现当前 sum,在 - k 之后的值,曾经出现过,那么说明存在图中连续的橙色子数组,满足累加和 = k
class Solution {public int subarraySum(int[] nums, int k) {Map<Integer, Integer> map = new HashMap<>();map.put(0, 1);int sum = 0, res = 0;for(int temp : nums) {sum += temp;if(map.containsKey(sum - k)) {res += map.get(sum - k);}map.put(sum, map.getOrDefault(sum, 0) + 1);}return res;}
}

【LeetCode笔记】560. 和为K的子数组(Java、前缀和、哈希表)相关推荐

  1. LeetCode 560. 和为K的子数组(前缀和差分)

    1. 题目 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1 ...

  2. Leetcode 523 连续的子数组和 前缀和 + 哈希表

    题目链接 一维前缀和思想: s u m [ i ] sum[i] sum[i] = s u m [ i − 1 ] sum[i-1] sum[i−1] + a [ i ] a[i] a[i] sum[ ...

  3. LeetCode 2302. 统计得分小于 K 的子数组数目(前缀和+二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 一个数组的 分数 定义为数组之和 乘以 数组的长度. 比方说,[1, 2, 3, 4, 5] 的分数为 (1 + 2 + 3 + 4 + 5) * 5 = ...

  4. LeetCode 862. 和至少为 K 的最短子数组(前缀和+deque单调栈)

    1. 题目 返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K . 如果没有和至少为 K 的非空子数组,返回 -1 . 示例 1: 输入:A = [1], K = 1 输出:1示例 2: ...

  5. 【算法】leetcode 974. 和可被 K 整除的子数组(前缀和思想)

    前言 前缀和相关: leetcode 974. 和可被 K 整除的子数组(前缀和思想) leetcode 560. 和为K的子数组(前缀和思想II) 问题来源 974. 和可被 K 整除的子数组 给定 ...

  6. [Leedcode][JAVA][第560题][和为K的子数组][Hashmap][数组]

    [问题描述][第560题][和为K的子数组][中等] 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数.示例 1 :输入:nums = [1,1,1], k = 2 输 ...

  7. 1248. 统计「优美子数组」 前缀和

    给你一个整数数组 nums 和一个整数 k. 如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」. 请返回这个数组中「优美子数组」的数目. 示例 1: 输入:nums ...

  8. LeetCode 2090. 半径为 k 的子数组平均值(滑窗)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的数组 nums ,数组中有 n 个整数,另给你一个整数 k . 半径为 k 的子数组平均值 是指:nums 中一个以下标 i 为 ...

  9. 力扣 2090. 半径为 k 的子数组平均值

    题目 给你一个下标从 0 开始的数组 nums ,数组中有 n 个整数,另给你一个整数 k . 半径为 k 的子数组平均值 是指:nums 中一个以下标 i 为 中心 且 半径 为 k 的子数组中所有 ...

  10. 2022-6-13 咒语和药水的成功对数,替换字符后匹配,统计得分小于 K 的子数组数目,......

    1. 咒语和药水的成功对数 You are given two positive integer arrays spells and potions, of length n and m respec ...

最新文章

  1. 聊天机器人之环境准备
  2. 第四周实践项目4 建立算法库——双链表
  3. PokeCats开发者日志(二)
  4. 对的调用没有匹配的函数_前端开发之——函数、事件、js对象
  5. Tomcat容器、JSP和Servlet
  6. axure web组件下载_实践干货:Axure插入图标的4种办法
  7. excel公式编辑器_Excel中自动更新超链接的文件目录,超简单
  8. oracle学用命令大全 笔记
  9. 服务器间数据传输的四种方式
  10. easypoi 表头数据导入_小窗通知丨关于金关二期加工贸易导入接口更新的通知
  11. linux子进程杀不掉怎么办,LINUX KILL -9 杀不掉,求解决方法
  12. 使用微信开发工具开发微信小程序(二)——协同工作、发布与事件绑定
  13. 求不变矩matlab,求HU不变矩七个参数
  14. 定制海报、AI扣人像小程序
  15. 科研tips——论文图的一些要求
  16. 计算机高级 论文怎么考,干货丨如何在一个月内通过高级软考证
  17. cl.fe3.xyz index.php,2_FE_Diabetes.ipynb
  18. InDesign插件--常规功能开发--版面调整--js脚本开发--ID插件
  19. Launchy--快速调出你的程序
  20. Unity中的物体遮挡关系(一)——基础认知

热门文章

  1. Leetcode--209. 长度最小的子数组
  2. rosserial_java_[学习笔记]Rosserial实现Windows-ROS交互操作(1)
  3. 空间连接时计算总和_学习CALCULATE函数(六)丨帕累托之累计求和
  4. ssrf漏洞 php,DokuWiki fetch.php SSRF漏洞与tok安全验证绕过分析
  5. 用ubuntu远程连接mysql_Ubuntu 安装 MySQL 和远程连接
  6. oracle磁带的使用期限,rman删除磁带库过期备份问题
  7. 大数据计算引擎:impala对比hive
  8. LiteIDE 编写Go的单元测试
  9. s5pv210开发板、原理图、刷机和数据手册
  10. 1053 Path of Equal Weigh(甲级)