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

农场的奶牛分组II

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

import java.util.*;


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

        // 如果总体重不能被3整除,无法分成三组,直接返回false
        if (totalWeight % 3 != 0) {
            return false;
        }

        // 目标每组体重
        int targetWeight = totalWeight / 3;
        int[] groupSums = new int[3];

        // 调用回溯函数进行尝试分组
        return backtrack(weights, 0, groupSums, targetWeight);
    }

// 回溯函数
    private boolean backtrack(int[] weights, int index, int[] groupSums,
                              int targetWeight) {
        // 所有奶牛都已分完,检查三组的体重和是否相等
        if (index == weights.length) {
            return groupSums[0] == targetWeight && groupSums[1] == targetWeight &&
                   groupSums[2] == targetWeight;
        }

        // 尝试将当前奶牛分到三组中的某一组
        for (int i = 0; i < 3; ++i) {
            if (groupSums[i] + weights[index] <= targetWeight) {
                groupSums[i] += weights[index];
                if (backtrack(weights, index + 1, groupSums, targetWeight)) {
                    return true;
                }
                groupSums[i] -= weights[index];
            }
        }

        return false;
    }
}

编程语言是Java。

该题考察的知识点是回溯算法

代码的文字解释如下:首先计算所有奶牛的总体重,如果总体重不能被3整除,则无法分成三组,直接返回false。然后计算目标每组体重targetWeight,即总体重除以3。使用一个长度为3的数组groupSums来保存每组的体重和,初始值为0。调用回溯函数backtrack来进行尝试分组,并返回分组是否成功的结果。

回溯函数backtrack递归地遍历每个奶牛,并尝试将其分到三组中的某一组,判断加入后该组的体重和是否小于等于targetWeight。如果满足条件,则将奶牛加入该组中,并继续递归地处理下一个奶牛。如果递归返回true,表示成功找到了一种分组方式,直接返回true。如果递归返回false,表示该分组方式不合适,需要将奶牛从当前组中移出,继续尝试其他分组方式。最终如果所有奶牛都已分完,检查三组的体重和是否相等,如果相等则返回true,否则返回false。

全部评论

相关推荐

喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务