题解 | #牛群的喂养顺序# 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。

全部评论

相关推荐

07-14 12:29
门头沟学院 Java
后端岗,实习三周感觉有点想跑路了,担心秋招被拉黑,有没有佬是字节HR知道情况的
从零开始的转码生活:你实习三周都想跑路,将来拿到offer真的愿意在这干十几二十年吗
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
码农索隆:卡学历都不行了,开始卡颜值了
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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