题解 | #牛群的喂养顺序# 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)和动态数组的操作
- 布尔值的运算
代码的文字解释如下:
- 布尔数组
access和列表makeAccess,用于记录奶牛的可访问状态和相互制约关系。 - 遍历二维数组
feedOrders,根据其中的信息更新access和makeAccess数组:将 feedOrders[i][1] 对应的奶牛的可访问状态设置为 false。将 feedOrders[i][1] 加入到 feedOrders[i][0] 对应的奶牛的制约关系列表中。 - 创建一个变量
size,初始值为奶牛数量numCows。 - 使用
while循环,在每次循环中遍历奶牛,并检查其可访问状态是否需要更新:如果奶牛的可访问状态为 true,则跳过当前循环。否则,遍历该奶牛的制约关系列表,检查每头奶牛的可访问状态是否为 false:如果存在任意一头奶牛的可访问状态为 false,将 flag 设置为 false 并跳出循环。否则,将 flag 设置为 true 并更新当前奶牛的可访问状态为 true。 - 每次循环结束后,将
size减 1。 - 循环结束后,遍历
access数组,如果存在任意一头奶牛的可访问状态为false,返回false。 - 如果所有奶牛的可访问状态都为
true,返回true。
曼迪匹艾公司福利 121人发布