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

农场的奶牛分组

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param weights int整型一维数组
     * @return bool布尔型
     */
    public boolean canPartition (int[] weights) {
        // write code here
        int sum = 0;
        for (int weight : weights) {
            sum += weight;
        }

        if ((sum & 1) == 1) {
            return false;
        }

        sum >>= 1;
        boolean[] f = new boolean[sum + 1];
        f[0] = true;

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

        return f[sum];
    }
}

编程语言是Java

考察的知识点为动态规划

代码解释:计算数组中所有元素的和,如果和为奇数,则无法平分为两个相等的子集,直接返回 false。然后,将总和除以 2,目标是在数组中找到一个子集的和等于这个值。使用一个布尔数组 f 来记录当前和能否由数组中的一部分元素组成,初始化只有 f[0] 为 true。然后,遍历数组中的每个元素,从后往前更新布尔数组,如果当前和可以由之前的元素和组成,或者加入当前元素后能够达到当前和,就将对应的 f 值设置为 true。最后,返回布尔数组的 f[sum] 位置即可判断是否可以平分为两个子集。

全部评论

相关推荐

头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
尊尼获获:闺蜜在哪?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务