题解 | #农场的奶牛分组#

农场的奶牛分组

https://www.nowcoder.com/practice/bdb90a97a15d42f989e406080d88bed9

知识点:动态规划

思路:

  1. 首先计算数组weights的总和sum,使用Arrays.stream方法对数组元素求和。
  2. 如果sum为奇数,则无法分割成两个相等的子集,直接返回false。
  3. 将sum除以2,得到目标子集的和,即sum/2。
  4. 创建一个长度为sum+1的布尔数组f,用于记录能否得到和为j的子集。
  5. 初始化f[0]为true,表示可以得到和为0的子集(即不选取任何元素)。
  6. 遍历数组weights的每个元素x。
  7. 从sum向下遍历到x,更新f[j]为f[j]或f[j - x]。f[j]表示能否得到和为j的子集,f[j - x]表示能否得到和为j-x的子集并选取元素x。
  8. 循环结束后,f[sum]即为是否能得到和为sum的子集。
  9. 返回f[sum]作为结果。

编程语言:java

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param weights int整型一维数组
     * @return bool布尔型
     */
    public boolean canPartition(int[] weights) {
        int sum = Arrays.stream(weights).sum();
        if (sum % 2 != 0) return false;
        sum /= 2;
        boolean[] f = new boolean[sum + 1];
        f[0] = true;

        for (int x : weights) {
            for (int j = sum; j >= x; j--) {
                f[j] = f[j] || f[j - x];
            }
        }
        return f[sum];
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 14:00
林子大了什么鸟都有啊,我觉得我说的已经很客气了,阴阳谁呢
牛客62656195...:应该不是阴阳吧?你第一次注册的时候boss就说你是牛人
点赞 评论 收藏
分享
05-23 20:31
已编辑
武汉大学 Java
内向的柠檬精在研究求...:注意把武大标粗标大 本地你俩不是乱杀
实习进度记录
点赞 评论 收藏
分享
06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务