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) {
        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。

该题表达的知识点:

  1. 二维数组:使用int[][]表示二维整数数组。
  2. 列表:使用ListArrayList来动态管理列表。
  3. 循环:使用for循环遍历数组和列表。
  4. 条件判断:使用if-else语句根据条件执行不同的代码。
  5. 布尔类型:使用boolean表示布尔类型变量,用于判断条件。

代码的文字解释大纲如下:

  1. 定义一个函数canFeedAllCows,参数为牛的数量numCows和喂养订单的二维数组feedOrders
  2. 创建一个布尔数组access,用于记录每头牛是否能被喂养,默认都为true
  3. 创建一个二维列表makeAccess,用于记录每个牛制造饲料的牛的索引。
  4. 遍历feedOrders数组,更新access数组和makeAccess列表的值。将feedOrders[i][1]索引对应的牛设置为不能被喂养(false)。将feedOrders[i][0]索引对应的牛添加到makeAccess[feedOrders[i][0]]列表中。
  5. 定义变量size,初始值为numCows
  6. 使用while循环,遍历每一个牛。如果某头牛i能够被喂养(access[i] == true)则跳过。否则,对于每个制造饲料的牛的索引j,如果有任何一头牛makeAccess[i][j]不能被喂养,则将flag置为false。如果所有制造饲料的牛都可以被喂养,则将当前牛i设置为可以被喂养(access[i] = true)。
  7. 遍历access数组,如果存在任何一头牛不能被喂养(access[i] == false),则返回false
  8. 如果所有牛都可以被喂养,则返回true作为结果。
全部评论

相关推荐

伟大的烤冷面被普调:暨大✌🏻就是强
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务