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。
该题表达的知识点:
- 二维数组:使用
int[][]表示二维整数数组。 - 列表:使用
List和ArrayList来动态管理列表。 - 循环:使用
for循环遍历数组和列表。 - 条件判断:使用
if-else语句根据条件执行不同的代码。 - 布尔类型:使用
boolean表示布尔类型变量,用于判断条件。
代码的文字解释大纲如下:
- 定义一个函数
canFeedAllCows,参数为牛的数量numCows和喂养订单的二维数组feedOrders。 - 创建一个布尔数组
access,用于记录每头牛是否能被喂养,默认都为true。 - 创建一个二维列表
makeAccess,用于记录每个牛制造饲料的牛的索引。 - 遍历
feedOrders数组,更新access数组和makeAccess列表的值。将feedOrders[i][1]索引对应的牛设置为不能被喂养(false)。将feedOrders[i][0]索引对应的牛添加到makeAccess[feedOrders[i][0]]列表中。 - 定义变量
size,初始值为numCows。 - 使用
while循环,遍历每一个牛。如果某头牛i能够被喂养(access[i] == true)则跳过。否则,对于每个制造饲料的牛的索引j,如果有任何一头牛makeAccess[i][j]不能被喂养,则将flag置为false。如果所有制造饲料的牛都可以被喂养,则将当前牛i设置为可以被喂养(access[i] = true)。 - 遍历
access数组,如果存在任何一头牛不能被喂养(access[i] == false),则返回false。 - 如果所有牛都可以被喂养,则返回
true作为结果。
查看6道真题和解析