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

牛群的喂养顺序

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param numCows int整型
     * @param feedOrders int整型二维数组
     * @return bool布尔型
     */
    public boolean canFeedAllCows (int numCows, int[][] feedOrders) {
        // write code here
        boolean[] access = new boolean[numCows];
        List<List<Integer>> makeAccess = new ArrayList<>();

        for (int i = 0; i < numCows; i++) {
            access[i] = true;
            makeAccess.add(new ArrayList<>());
        }

        for (int i = 0; i < feedOrders.length; i++) {
            access[feedOrders[i][1]] = false;
            makeAccess.get(feedOrders[i][0]).add(feedOrders[i][1]);
        }

        int size = numCows;
        while (size-- > 0) {
            for (int i = 0; i < numCows; i++) {
                if (access[i]) {
                    continue;
                } else {
                    boolean flag = true;
                    for (int j = 0; j < makeAccess.get(i).size(); j++) {
                        if (!access[makeAccess.get(i).get(j)]) {
                            flag = false;
                            break;
                        }
                    }
                    if (flag) {
                        access[i] = true;
                    }
                }
            }
        }

        for (int i = 0; i < numCows; i++) {
            if (!access[i]) {
                return false;
            }
        }
        return true;
    }
    }

编程语言是Java。

该题考察的知识点包括:

  • 二维数组的使用
  • 循环和条件语句的控制流
  • 列表(List)和动态数组的操作
  • 布尔值的运算

代码的文字解释如下:

  1. 布尔数组 access 和列表 makeAccess,用于记录奶牛的可访问状态和相互制约关系。
  2. 遍历二维数组 feedOrders,根据其中的信息更新 access 和 makeAccess 数组:将 feedOrders[i][1] 对应的奶牛的可访问状态设置为 false。将 feedOrders[i][1] 加入到 feedOrders[i][0] 对应的奶牛的制约关系列表中。
  3. 创建一个变量 size,初始值为奶牛数量 numCows
  4. 使用 while 循环,在每次循环中遍历奶牛,并检查其可访问状态是否需要更新:如果奶牛的可访问状态为 true,则跳过当前循环。否则,遍历该奶牛的制约关系列表,检查每头奶牛的可访问状态是否为 false:如果存在任意一头奶牛的可访问状态为 false,将 flag 设置为 false 并跳出循环。否则,将 flag 设置为 true 并更新当前奶牛的可访问状态为 true。
  5. 每次循环结束后,将 size 减 1。
  6. 循环结束后,遍历 access 数组,如果存在任意一头奶牛的可访问状态为 false,返回 false
  7. 如果所有奶牛的可访问状态都为 true,返回 true
全部评论

相关推荐

08-23 20:17
四川大学 C++
xxxzsfa:技术栈可以参考我这个给写,把知识点写出来起码能让面试官知道你是知道这个点的,不会的知识点可以不写,简历上写了但又答不上来就很尴尬了,可以给技术栈中的知识点和项目中的难点亮点加粗,学历不错,肯定会有大厂面的,刚开始可以先投中小厂练手,拿个offer保底再去面大厂,秋招可以正式和实习一起找,找工作是个需要长期坚持的过程,加油查看图片
点赞 评论 收藏
分享
09-17 10:53
四川大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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