题解 | #牛群的喂养顺序#
牛群的喂养顺序
https://www.nowcoder.com/practice/ce8860b6a8c74dfd8ccd15998970e447
考察的知识点:映射、迭代器;
解答方法分析:
- 首先,代码定义了一个canFeedAllCows函数,函数的参数包括numCows和feedOrders。
- 在函数内部,通过map来存储喂养顺序,其中feedOrder[1]作为键,feedOrder[0]作为值,这样可以方便地根据顺序查询对应的牛。
- 代码中使用了一个for循环来遍历map中的键值对,找出起始顺序和结束顺序,并将其赋值给start和end变量。同时,使用flag变量来标记是否已经找到起始顺序和结束顺序。
- 然后,使用一个while循环,从起始顺序开始,通过map查找下一个顺序,直到到达结束顺序。在此过程中,如果发现在map中找不到下一个顺序,就说明可以喂养所有的牛,返回true;否则,继续查找下一个顺序,直到循环结束。
- 如果循环结束后仍未找到结束顺序,说明存在循环依赖,即无法喂养所有的牛,返回false。
- 最后,在main函数中读取输入的牛的数量和喂养顺序,调用canFeedAllCows函数,并将结果输出。
所用编程语言:C++;
完整编程代码:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numCows int整型
* @param feedOrders int整型vector<vector<>>
* @return bool布尔型
*/
bool canFeedAllCows(int numCows, vector<vector<int> >& feedOrders) {
std::map<int, int> map;
for (auto& feedOrder : feedOrders) {
map[feedOrder[1]] = feedOrder[0];
}
int start = 0;
int end = 0;
bool flag = false;
for (auto& entry : map) {
if (!flag) {
start = entry.first;
end = entry.second;
flag = true;
break;
}
}
while (start != end) {
if (map.count(end) == 0) {
return true;
}
end = map[end];
}
return false;
}
};
查看23道真题和解析