【前缀和】| LeetCode 974题解 和可被K整除的子数组
和可被K整除的子数组
- 一、题目链接
- 二、题目
- 三、算法原理
- 四、编写代码
一、题目链接
和可被K整除的子数组
二、题目
三、算法原理
解法一:暴力枚举,枚举出所有的子数组看看是否能被k整除。本题依旧不能用滑动窗口做优化,因为这里还是有0和负整数,不能保证有单调性。
四、编写代码
class Solution {
public:int subarraysDivByK(vector<int>& nums, int k) {unordered_map<int, int> hash;// 前缀和的余数出现的次数hash[0 % k] = 1;// 0 这个数的余数int sum = 0, ret = 0;for (auto x : nums){sum += x;// 当前位置的前缀和int r = (sum % k + k) % k;// 修正后的余数if (hash.count(r)) ret += hash[r];hash[r]++;}return ret;}
};