1590. 使数组和能被 P 整除
题目链接:1590. 使数组和能被 P 整除
代码如下:
cpp
class Solution {
public:
int minSubarray(vector<int>& nums, int p) {
int x = 0;
for (auto num : nums) {
x = (x + num) % p;
}
if (x == 0) {
return 0;
}
unordered_map<int, int> index;
int y = 0, res = nums.size();
for (int i = 0;i < nums.size();i++) {
index[y] = i; // f[i] mod p = y, 因此哈希表记录 y 对应的下标为 i
y = (y + nums[i]) % p;
if (index.count((y - x + p) % p) > 0) {
res = min(res, i - index[(y - x + p) % p] + 1);
}
}
return res == nums.size() ? -1 : res;
}
};