题目描述:
给定一个包含 非负数 的数组和一个目标 整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,且总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。
说明:
- 数组的长度不会超过 10,000 。
- 你可以认为所有数字总和在 32 位有符号整数范围内。
示例 1:
输入:[23,2,4,6,7], k = 6
输出:True
解释:[2,4] 是一个大小为 2 的子数组,并且和为 6。
示例 2:
输入:[23,2,6,4,7], k = 6
输出:True
解释:[23,2,6,4,7]是大小为 5 的子数组,并且和为 42。
代码如下:(前缀和)
class Solution {
public boolean checkSubarraySum(int[] nums, int k) {
int n = nums.length;
int[] arr = new int[n + 1];
arr[0] = 0;
for (int i = 0; i < n; i++) {
arr[i + 1] = arr[i] + nums[i];
}
int ans = 0;
for (int i = 1; i <= n; i++) {
for (int j = 0; j < i - 1; j++) {
if (arr[i] - arr[j] == k || (k != 0 && (arr[i] - arr[j]) % k == 0)) {
return true;
}
}
}
return false;
}
}
执行结果: