难度中等
给你一个整数数组 nums
和一个整数 k
,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:
- 子数组大小 至少为 2 ,且
- 子数组元素总和为
k
的倍数。
如果存在,返回 true
;否则,返回 false
。
如果存在一个整数 n
,令整数 x
符合 x = n * k
,则称 x
是 k
的一个倍数。0
始终视为 k
的一个倍数。
思路: 采用余数相同的方式实现
①对数组进行连续求和,计算数组中从 0 到 i 位置的数组和 Si;
②若要求某连续子数组的和,其值为子数组最后位置的数组和(Si)减去当前子数字前一个位置的数组和(Sj) Si - Sj
③若某连续子数组的元素和为 k 的倍数,即 (Si - Sj)% k = 0 可转换为 Si%k = Sj%k 。
根据上述思路,将数组和取余,找到相同的数组并计算是否满足长度大于 2 。
代码:
bool checkSubarraySum(vector<int