-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
题目
给定一个包含 非负数 的数组和一个目标 整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,且总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。
示例
示例 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。
解题
解题方法
/**
* @param {number[]} nums
* @param {number} k
* @return {boolean}
*/
var checkSubarraySum = function(nums, k) {
if(nums.length < 2) return false
let preSumK = 0
const map = new Array(nums.length + 1).fill(0)
map[0] = 0
map[1] = nums[0]
for (let i = 2; i <= nums.length; i++) {
map[i] = nums[i - 1] + map[i - 1];
}
for(let i = 0; i < map.length; i++) {
for(let j = 0; j < i; j++) {
const currentDiff = map[i] - map[j];
if(i - j >= 2) {
if(k === 0 ) {
if(currentDiff === 0) return true
} else {
if(currentDiff % k === 0) return true
}
}
}
}
return false
};