Leetcode--560. 和为K的子数组
给定一个整数数组和一个整数 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的子数组相关推荐
- 【LeetCode笔记】560. 和为K的子数组(Java、前缀和、哈希表)
文章目录 题目描述 思路 & 代码 暴力法 O(n2n^2n2) 前缀和 + 哈希表 O(n) 二刷 题目描述 第一道前缀和题目- 思路 & 代码 暴力法 O(n2n^2n2) 固定一 ...
- 560. 和为K的子数组 974. 和可被 K 整除的子数组 (哈希表)
引言 这两道题非常相似,也是对哈希表运用的考察,两道题合到一起总结一下 560. 和为K的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入 ...
- 560. 和为K的子数组
560. 和为K的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] ...
- LeetCode 713 乘积小于K的子数组
写在前面 一道很艺术的编程题~做学习记录 题目描述 给定一个正整数数组 nums和整数 k . 请找出该数组内乘积小于 k 的连续的子数组的个数. 示例 示例1: 输入: nums = [10,5,2 ...
- 力扣 560. 和为 K 的子数组
题目 给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数. 示例 输入:nums = [1,1,1], k = 2 输出:2 输入:nums = [1,2 ...
- LeetCode 713. 乘积小于 K 的子数组
713. 乘积小于 K 的子数组 [双指针]s表示前j到i的数字的乘积,当发现乘积大于等于k的时候,就把j向右移动,并且把s除掉个nums[j],这样得到的就是以i结尾的符合要求的数组的最大长度,比这 ...
- ⭐算法入门⭐《双指针》中等04 —— LeetCode 713. 乘积小于K的子数组
- LeetCode 937. 重新排列日志文件 / 1823. 找出游戏的获胜者(约瑟夫环问题) / 713. 乘积小于 K 的子数组
937. 重新排列日志文件 2022.5.3 每日一题 题目描述 给你一个日志数组 logs.每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 . 有两种不同类型的日志: 字母日志: ...
- LeetCode 713、乘积小于 K 的子数组
713.乘积小于 K 的子数组 1)题目描述 给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目. 示例 1: 输入:nums = [10,5 ...
- 0505|713. 乘积小于 K 的子数组
0505|713. 乘积小于 K 的子数组 mid 滑动窗口. 求连续子树组的个数,"连续子树组"很强的暗示---使用滑动窗口. 本题只需记录 以每个数字为右边界所形成的有效子数组 ...
最新文章
- 创建DLL动态链接库——声明导出法
- 用好这 12 款 Chrome 扩展,让你的「新标签页」变得好看又实用
- js实现给html固定区域增加水印
- Mockito cannot mock/spy because : - final class 问题
- 分页池内存持续增长_Java技术学习之对虚拟机(JVM)内存模型的分析
- android开发相关资料整理【2011-10-29】
- Codeforces Round #530 (Div. 1) 1098A Sum in the tree
- ef.extensions mysql_EFcore 使用 EFCore.BulkExtensions(不支持mysql)或 EntityFramework-Plus 批量增加、删除、修改...
- Java Thread类最终同步的void join(long time_in_ms)方法,带有示例
- struts过滤器和拦截器的区别
- 用python写个电子钟_[TPYBoard - Micropython之会python就能做硬件 3] 制作电子时钟
- YII framework CComponent基础类解读(转)
- TextView内可以有多种样式吗?
- 解决word错误提示宏错误提示和模板错误提示
- 列车控制matlab仿真,基于matlab的列车纵向碰撞建模仿真研究
- 从一个组件的实现来深刻理解 JS 中的继承
- java jsp网页计算器_使用jsp+javaBean写一个网页计算器
- 企业网络安全 8 条实用参考
- 手机浏览器怎么查看html,手机浏览器网页收藏在哪里查看
- 希尔伯特空间巴拿赫空间空间上的翻译
热门文章
- 程序员面试金典 - 面试题 16.26. 计算器(栈)
- 剑指Offer - 面试题17. 打印从1到最大的n位数
- ubuntu memcached php,如何在 Ubuntu 18.04 上安装 Memcached
- python获取股票数据_python根据股票代码获取当前数据
- 写一个函数取出php,写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名...
- SQL基础知识:DDL、DML、DQL
- word里双横线怎么打_美人计 | 精致打工人秀智,教你内双怎么化
- 稀疏大模型简述:从MoE、Sparse Attention到GLaM
- 万万没想到,我的炼丹炉玩坏了
- ESLint 在中大型团队的应用实践