引言

这两道题非常相似,也是对哈希表运用的考察,两道题合到一起总结一下

560. 和为K的子数组

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

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

说明 :

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

这道题就是通过逐一统计数组前缀和再通过哈希表的查找来确定所有子数组个数;

这里只需要注意一点就是,前缀和本身就是k的时候需要初始化为1,就这一种情况;

注释在代码里,就不写详细题解了,代码如下:

class Solution {public:int subarraySum(vector<int>& nums, int k) {//key为前缀和,value为该和出现的次数unordered_map<int, int> hash;//前缀和为0的时候出现次数为一次hash[0] = 1;//如果存在pre[i] = pre[i - 1] + k;那么就可以在map里找是否存在pre[i] - k,//即map中是否存在pre[i - 1]来确定子数组个数int pre = 0, ans = 0;for (int i : nums) {pre += i;if (hash.find(pre - k) != hash.end()) {ans += hash[pre - k];}hash[pre]++;}return ans;}
};

974. 和可被 K 整除的子数组

给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续、非空)子数组的数目。

示例:
输入:A = [4,5,0,-2,-3,1], K = 5
输出:7
解释:
有 7 个子数组满足其元素之和可被 K = 5 整除:
[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]

提示:

1 <= A.length <= 30000
-10000 <= A[i] <= 10000
2 <= K <= 10000

这一道几乎一模一样,方法都一样,无非就是上一道题的哈希表key值是差,这一道题变成就可以了;

同样注意初始化,当前缀和本身被 k 整除时初始化为1即可;

额外注意一点,c++取模时如果被除数为负数时取模结果也为负数,所以为了方便运算这里需要一个转化,将结果转化为正数;

代码如下:

class Solution {public:int subarraysDivByK(vector<int>& nums, int k) {unordered_map<int, int> hash;hash[0] = 1;int ans = 0, pre = 0;for (int i : nums) {pre += i;//当被除数为负数时取模结果为负数,需要改为正数int mod = (pre % k + k) % k;if (hash[mod]) {ans += hash[mod];}hash[mod]++;}return ans;}
};

这两道还是需要能够想到哈希表该怎么来用,这也是解题的关键;

560. 和为K的子数组 974. 和可被 K 整除的子数组 (哈希表)相关推荐

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

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

  2. Leetcode--713. 乘积小于k的子数组

    给定一个正整数数组 nums. 找出该数组内乘积小于 k 的连续的子数组的个数. 示例 1: 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小于100的子数 ...

  3. 20191021:(leetcode习题)乘积小于K的子数组

    乘积小于K的子数组 题目 大致思路 代码实现 题目 给定一个正整数数组 nums.找出该数组内乘积小于 k 的连续的子数组的个数. 输入: nums = [10,5,2,6], k = 100 输出: ...

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

    题目 给定一个正整数数组 nums和整数 k . 请找出该数组内乘积小于 k 的连续的子数组的个数. 示例 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小 ...

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

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

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

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

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

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

  8. 解题思路-LeetCode第713题:乘积小于K的子数组

    解题思路-LeetCode第713题:乘积小于K的子数组 题目描述: 给定一个正整数数组 nums. 找出该数组内乘积小于 k 的连续的子数组的个数. 示例 1: 输入: nums = [10,5,2 ...

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

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

最新文章

  1. PE病毒初探——向exe注入代码
  2. 汉字的奥秘: 获取汉字的笔画数
  3. java oauth server_Spring OAuth2 ResourceServer外部AuthorizationServer
  4. 2.12 Hivet中order by,sort by、distribute by和cluster by
  5. asp 可否压缩_怎样用ASP压缩文件
  6. Django中datetime类型的相关操作(记录一下)
  7. idea 无效的目标发行版_maven构建异常(无效的目标发行版: 1.8)
  8. 斯坦福 CS228 概率图模型中文讲义 一、引言
  9. NodeJS-001-Nodejs学习文档整理(转-出自http://www.cnblogs.com/xucheng)
  10. gateway请求拦截_gateway 网关(转发,跨域,拦截器等)
  11. java易忘代码备份
  12. debian9 linux的版本,Debian 9.4 发布,小版本更新
  13. 数学分析教程(科大)——1.11笔记+习题
  14. 不限速的免费下载神器,牛逼!
  15. 质感美颜秒变大片,相芯科技人脸特效SDK全面升级
  16. ovs 内核态加打印调试
  17. 【绘图】python 配色表
  18. 微信小程序使用iconfont阿里矢量多色图标
  19. r语言 柱状图加星号_如何用R画分组柱状图并且添加标准差和显著性标记(星号)?...
  20. 使用LASSO进行全基因组关联分析

热门文章

  1. php禁止国外访问,wordpress 禁止国外ip访问
  2. java 反射set方法赋值_反射 根据属性名获得属性set方法并为set方法赋值
  3. 数据中心用多模光纤技术及发展趋势
  4. 数据中心发电机组的选择及控制
  5. 一个图片 在另一个图片定位_淋雨图片孤身一人 一个人在淋雨的图片_新闻资讯...
  6. 成功解决基于pyecharts生成的html文件打开时显示空白
  7. CV之FD之HOG:图像检测之基于HOG算法、简介、代码实现(计算图像相似度)之详细攻略
  8. CV之FD:基于dlib、cv2库利用warpPerspective函数和_68_face_landmarks文件实现AI换脸渐变融合视频效果
  9. ML之FE:利用FE特征工程(单个特征及其与标签关系的可视化)对RentListingInquries(Kaggle竞赛)数据集实现房屋感兴趣程度的多分类预测
  10. ML之Xgboost:利用Xgboost模型对数据集(比马印第安人糖尿病)进行二分类预测(5年内是否患糖尿病)