题目描述
chuck 在一家互联网公司上班,公司的上下级很清晰,除了董事长,每个人都有一个唯一的上级。
比如一个公司里面,A的上级是X,B的上级是X,C的上级是Y,D的上级是Y,X的上级是Z,Y的上级是Z,那么只有Z是没有上级的,所以Z是董事长。
现在每个人用一个数字表示,给出公司的上下级关系,现在让你帮忙找出董事长。
案例代码
这个问题可以通过构建一个上级-下级关系的映射表来解决。可以使用一个哈希表(或unordered_map)来实现这个映射表,键为下级,值为上级。
具体的解题思路可以分为两步:
- 遍历给定的上下级关系,将每个人的上级和下级关系存入哈希表中。
- 遍历哈希表的键,找到没有上级的人,也就是董事长。
下面是一个使用C++实现的案例代码:
#include <iostream>
#include <unordered_map>
int findChairman(const std::unordered_map<int, int>& relations) {
std::unordered_map<int, bool> hasSuperior; // 用于记录一个人是否有上级
// 遍历上下级关系,构建上级-下级关系映射表
for (auto it = relations.begin(); it != relations.end(); ++it) {
int subordinate = it->first;
int superior = it->second;
hasSuperior[subordinate] = true; // 表明此人有上级
if (hasSuperior.find(superior) == hasSuperior.end()) {
// 如果上级不在表中,表明上级没有上级,即上级就是董事长
return superior;
}
}
// 如果没有找到董事长,则没有人没有上级,即没有董事长
return -1;
}
int main() {
// 上下级关系:键为下级,值为上级
std::unordered_map<int, int> relations = {{A, X}, {B, X}, {C, Y}, {D, Y}, {X, Z}, {Y, Z}};
int chairman = findChairman(relations);
if (chairman == -1) {
std::cout << "没有董事长" << std::endl;
} else {
std::cout << "董事长是:" << chairman << std::endl;
}
return 0;
}
注意,在上面的代码中,我将人用数字表示,你可以根据实际情况将其替换为适当的类型。另外,这个例子中使用了unordered_map来实现哈希表,如果使用map,也可以得到相同的结果。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END