给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。

示例 1 :

输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
说明 :

数组的长度为 [1, 20,000]。
数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。

思路:哈希表  时间复杂度O(N)

一开始想用滑动窗口做,但是发现负数,然后。。。。滑不动啊

从头开始遍历数组,依次把nums[i]加到sum,用哈希表来存每次的和

HashMap < Integer, Integer >     哈希表的第一个值key指的是sum的值,第二个值value指的是这个值出现的次数

我们寻找sum-k的值出现的次数即可

为什么是sum-k呢?   sum-(sum-k)=k

例如:从i=0开始到当前位置i的和为sum,而如果哈希表里面存在键值为sum-k数,他表示的是从i=0到位置为x的和为sum-k

那么从位置为x+1到位置为i的和就是k,我们只需要观察k的value是多少,也就是他出现了多少次

提交的代码:

class Solution {

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

int count = 0, sum = 0;

HashMap < Integer, Integer > map = new HashMap < > ();

map.put(0, 1);

for(int i=0;i<nums.length;i++)

{

sum+=nums[i];

if(map.containsKey(sum-k))

{

count+=map.get(sum-k);//获得sum-k出现的次数

}

map.put(sum, map.getOrDefault(sum, 0)+1);

//如果这个sum之前出现过,那么给他的次数+1,如果没出现过,那么就是第一次出现,把他添加进哈希表,存的是(sum,1)

}

return count;

}

}

Leetcode--560. 和为K的子数组相关推荐

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

    文章目录 题目描述 思路 & 代码 暴力法 O(n2n^2n2) 前缀和 + 哈希表 O(n) 二刷 题目描述 第一道前缀和题目- 思路 & 代码 暴力法 O(n2n^2n2) 固定一 ...

  2. 560. 和为K的子数组 974. 和可被 K 整除的子数组 (哈希表)

    引言 这两道题非常相似,也是对哈希表运用的考察,两道题合到一起总结一下 560. 和为K的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入 ...

  3. 560. 和为K的子数组

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

  4. LeetCode 713 乘积小于K的子数组

    写在前面 一道很艺术的编程题~做学习记录 题目描述 给定一个正整数数组 nums和整数 k . 请找出该数组内乘积小于 k 的连续的子数组的个数. 示例 示例1: 输入: nums = [10,5,2 ...

  5. 力扣 560. 和为 K 的子数组

    题目 给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数. 示例 输入:nums = [1,1,1], k = 2 输出:2 输入:nums = [1,2 ...

  6. LeetCode 713. 乘积小于 K 的子数组

    713. 乘积小于 K 的子数组 [双指针]s表示前j到i的数字的乘积,当发现乘积大于等于k的时候,就把j向右移动,并且把s除掉个nums[j],这样得到的就是以i结尾的符合要求的数组的最大长度,比这 ...

  7. ⭐算法入门⭐《双指针》中等04 —— LeetCode 713. 乘积小于K的子数组

  8. LeetCode 937. 重新排列日志文件 / 1823. 找出游戏的获胜者(约瑟夫环问题) / 713. 乘积小于 K 的子数组

    937. 重新排列日志文件 2022.5.3 每日一题 题目描述 给你一个日志数组 logs.每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 . 有两种不同类型的日志: 字母日志: ...

  9. LeetCode 713、乘积小于 K 的子数组

    713.乘积小于 K 的子数组 1)题目描述 给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目. 示例 1: 输入:nums = [10,5 ...

  10. 0505|713. 乘积小于 K 的子数组

    0505|713. 乘积小于 K 的子数组 mid 滑动窗口. 求连续子树组的个数,"连续子树组"很强的暗示---使用滑动窗口. 本题只需记录 以每个数字为右边界所形成的有效子数组 ...

最新文章

  1. 创建DLL动态链接库——声明导出法
  2. 用好这 12 款 Chrome 扩展,让你的「新标签页」变得好看又实用
  3. js实现给html固定区域增加水印
  4. Mockito cannot mock/spy because : - final class 问题
  5. 分页池内存持续增长_Java技术学习之对虚拟机(JVM)内存模型的分析
  6. android开发相关资料整理【2011-10-29】
  7. Codeforces Round #530 (Div. 1) 1098A Sum in the tree
  8. ef.extensions mysql_EFcore 使用 EFCore.BulkExtensions(不支持mysql)或 EntityFramework-Plus 批量增加、删除、修改...
  9. Java Thread类最终同步的void join(long time_in_ms)方法,带有示例
  10. struts过滤器和拦截器的区别
  11. 用python写个电子钟_[TPYBoard - Micropython之会python就能做硬件 3] 制作电子时钟
  12. YII framework CComponent基础类解读(转)
  13. TextView内可以有多种样式吗?
  14. 解决word错误提示宏错误提示和模板错误提示
  15. 列车控制matlab仿真,基于matlab的列车纵向碰撞建模仿真研究
  16. 从一个组件的实现来深刻理解 JS 中的继承
  17. java jsp网页计算器_使用jsp+javaBean写一个网页计算器
  18. 企业网络安全 8 条实用参考
  19. 手机浏览器怎么查看html,手机浏览器网页收藏在哪里查看
  20. 希尔伯特空间巴拿赫空间空间上的翻译

热门文章

  1. 程序员面试金典 - 面试题 16.26. 计算器(栈)
  2. 剑指Offer - 面试题17. 打印从1到最大的n位数
  3. ubuntu memcached php,如何在 Ubuntu 18.04 上安装 Memcached
  4. python获取股票数据_python根据股票代码获取当前数据
  5. 写一个函数取出php,写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名...
  6. SQL基础知识:DDL、DML、DQL
  7. word里双横线怎么打_美人计 | 精致打工人秀智,教你内双怎么化
  8. 稀疏大模型简述:从MoE、Sparse Attention到GLaM
  9. 万万没想到,我的炼丹炉玩坏了
  10. ESLint 在中大型团队的应用实践