美文网首页
将整数数组分割为 k 个子数组, 和相等 -- 698

将整数数组分割为 k 个子数组, 和相等 -- 698

作者: Joah_l | 来源:发表于2019-11-21 11:04 被阅读0次
// NOTE: (698)给定一个整数, nums, 和 一个正整数 k;
// 找出是否可能把这个数组分成 k 个非空子集; 其总和都相等
// 1 <= k <= len(nums) <= 16
// 0 <= nums[i] <= 10000
// input: nums = [4, 3, 2, 3, 5, 2, 1], k=4
// (5), (1,4), (3,2), (2,3)
function canPartitionKSubsets(nums, k) {
  let max = nums[0]
  let sum = 0
  for (let n of nums) {
    sum = sum + n
    if (n > max) {
      max = n
    }
  }
  if (sum % k !== 0 || sum / k < max) {
    return false
  }
  let target = sum / k;
  let used = []
  return dfs(target, nums, used, 0, k, 0)
}

function dfs(target, nums, used, sum, k, start) {
  if (k === 1) {
    return true
  }
  // 搜索到了一组
  if (sum === target) {
    return dfs(target, nums, used, 0, k - 1, 0)
  }

  for (let i = start, len = nums.length; i < len; i++) {
    let total = sum + nums[i]
    if (!used[i] && total <= target) {
      used[i] = true
      if (dfs(target, nums, used, total, k, i + 1)) {
        return true
      }
      used[i] = false
    }
  }
  return false
}

function canPartitionKSubsets2(nums, k) {
  let max = nums[0]
  let sum = 0
  for (let n of nums) {
    sum = sum + n
    if (n > max) {
      max = n
    }
  }
  if (sum % k !== 0 || sum / k < max) {
    return false
  }
  let target = sum / k;
  let used = []
  return dfs(target, nums, used, 0, k, 0)
}


const r = canPartitionKSubsets([10, 10, 10, 6, 6, 6, 7, 7, 7, 7, 7, 7], 3)
console.log(r)

相关文章

  • 将整数数组分割为 k 个子数组, 和相等 -- 698

  • LeetCode 698 划分为k个相等的子集

    698. 划分为k个相等的子集 给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个...

  • 10-Python-NumPy数组分割

    数组分割相关函数介绍 函数数组及操作split将一个数组分割为多个子数组hsplit将一个数组水平分割为多个子数组...

  • 416. 分割等和子集

    给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的...

  • LeetCode.416分割等和子集

    给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意每个数组中的元素...

  • T416、分割等和子集

    给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素...

  • 动态规划:416.分割等和子集(0-1背包)

    /** 题目 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意:...

  • lintcode 最大子数组|||

    给定一个整数数组和一个整数 k,找出 k 个不重叠子数组使得它们的和最大。每个子数组的数字在数组中的位置应该是连续...

  • Leetcode每日一题1248-统计「优美子数组」

    给你一个整数数组 nums 和一个整数 k。 如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组...

  • 分割等和子集

    题目描述:给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例:输入...

网友评论

      本文标题:将整数数组分割为 k 个子数组, 和相等 -- 698

      本文链接:https://www.haomeiwen.com/subject/ghizictx.html