2359. 找到离给定两个节点最近的节点

2359. 找到离给定两个节点最近的节点


题目链接:2359. 找到离给定两个节点最近的节点

代码如下:

class Solution {
public:
	int closestMeetingNode(vector<int>& edges, int node1, int node2) {
		auto calc_dis = [&](int x) {
			vector<int> dis(edges.size(), edges.size());//初始化为边的个数,表示无法到达或者尚未访问的节点
			//从x触发,知道无路可走(x=-1)或者重复访问节点(dis[x]
			for (int d = 0;x >= 0 && dis[x] == edges.size();x = edges[x]) {
				dis[x] = d++;
			}
			return dis;
			};

		vector<int> dis1 = calc_dis(node1);
		vector<int> dis2 = calc_dis(node2);

		int min_dis = edges.size(), res = -1;
		for (int i = 0;i < edges.size();i++) {
			int d = max(dis1[i], dis2[i]);
			if (d < min_dis) {
				min_dis = d;
				res = i;
			}
		}
		return res;
	}
};

你可能感兴趣的:(leetcode,c++)