Skip to content

523. 连续的子数组和 #35

@bt2ee

Description

@bt2ee

题目

给定一个包含 非负数 的数组和一个目标 整数 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
};

相关题目

974. 和可被 K 整除的子数组
560. 和为K的子数组

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions