欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > leetcode0974. 和可被 K 整除的子数组-medium

leetcode0974. 和可被 K 整除的子数组-medium

2025/7/22 3:18:32 来源:https://blog.csdn.net/weixin_37253733/article/details/146430950  浏览:    关键词:leetcode0974. 和可被 K 整除的子数组-medium

1 题目:0974. 和可被 K 整除的子数组

官方标定难度:

给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的非空 子数组 的数目。

子数组 是数组中 连续 的部分。

示例 1:

输入:nums = [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]

示例 2:

输入: nums = [5], k = 9
输出: 0

提示:

1 < = n u m s . l e n g t h < = 3 ∗ 1 0 4 1 <= nums.length <= 3 * 10^4 1<=nums.length<=3104
− 104 < = n u m s [ i ] < = 1 0 4 -104 <= nums[i] <= 10^4 104<=nums[i]<=104
2 < = k < = 1 0 4 2 <= k <= 10^4 2<=k<=104

2 solution

和第 0560 很类似,直接用前缀和,避免过多求和,用 hash 快速检索,保存 mod k 的结果即可,注意负数取余数的情况。

代码

class Solution {
public:int subarraysDivByK(vector<int> &nums, int k) {unordered_map<int, int> map;int sum = 0;int cnt = 0;for (int i = 0; i < nums.size(); i++) {sum = (sum + nums[i]) % k;sum = (sum + k) % k;cnt += map[sum];if (sum == 0) cnt++;map[sum]++;}return cnt;}
};

结果

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词