题解 | #牛群的喂养顺序# java

牛群的喂养顺序

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param numCows int整型
     * @param feedOrders int整型二维数组
     * @return bool布尔型
     */
    int[] parent;
    public boolean canFeedAllCows (int numCows, int[][] feedOrders) {
        // write code here
        // 初始化并查集的父元素数组
        parent = new int[numCows];
        for (int i = 0; i < numCows; i++) {
            parent[i] = i;
        }

        // 遍历食物订单
        for (int i = 0; i < feedOrders.length; i++) {
            if (findParent(feedOrders[i][1], feedOrders[i][0])) {
                parent[feedOrders[i][0]] = feedOrders[i][1];
            } else {
                return false;
            }
        }

        return true;
    }

// 查找父元素
    public boolean findParent(int i, int num) {
        if (parent[i] == i) {
            return true;
        }
        if (parent[i] == num) {
            return false;
        }
        return findParent(parent[i], num);
    }
}

该问题使用的编程语言是Java。

该题考察的知识点是并查集

并查集是一种用于处理集合合并与查询连通性的数据结构。它可以有效地回答两个元素是否属于同一个集合,以及将两个集合合并成一个集合。

在这个问题中,我们使用并查集来判断是否能够满足所有的喂食订单。每个牛被表示为一个节点,并查集中存储了每个奶牛的父节点。首先,我们将每个牛的父节点初始化为自身。然后,遍历食物订单,对于每一个订单,如果两头牛已经在同一个集合中,说明存在矛盾,返回false;否则,将其中一个牛的父节点指向另一个牛,合并它们所在的集合。最后,如果没有出现任何矛盾,即所有的喂食订单都可以被满足,返回true。

全部评论

相关推荐

06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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