首页 > 试题广场 >

划分等和序列

[编程题]划分等和序列
  • 热度指数:730 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为 n 的数组,和一个目标组数 k ,请问能否把这个数组划分成 k 个非空子集,其和都相等。

数据范围: ,数组中的值都满足
示例1

输入

[5,1,3,2,4],3

输出

true

说明

5|1 4|2 3  
示例2

输入

[5,1,4,2,3,2],3

输出

false
public boolean candivide (ArrayList<Integer> nums, int k) {
    int sum = 0;
    for (Integer num : nums) {
        sum += num;
    }
    if (sum % k != 0) {
        return false;
    }
    int target = sum / k;
    int[] dp = new int[target + 1];
    for (Integer num : nums) {
        if (num > target) {
            return false;
        }
        for (int j = target; j >= num; j--) {
            dp[j] = Math.max(dp[j], dp[j - num] + num);
        }
        //我题目理解的有问题,还是案例不够多呀
        //nums = 2,6,3,10,8,4 k = 3时 不能凑出都是11的吧 但是还是返回的true
        if(dp[target] == target){
            return true;
        }
    }
    return false;
}
这样子为什么能过呀,可是nums = 2,6,3,10,8,4 k = 3时 不能凑出都是11的吧 但是还是返回的true
发表于 2022-04-08 15:16:53 回复(1)

问题信息

难度:
3条回答 2580浏览

热门推荐

通过挑战的用户

查看代码