leetcode 684. Redundant Connection解法

Example 1:

Input: [[1,2], [1,3], [2,3]]
Output: [2,3]
Explanation: Original tree will be like this:
  1
 / \
2 - 3

Example 2:

Input: [[1,2], [1,3], [3,1]]
Output: [3,1]
Explanation: Original tree will be like this:
  1
 / \\
2   3

从例子来看,是从给出的起点终点的数组edges中,找出第一个形成环的元素。

思路:

题目中,每个数字代表一个点,定义一个起点与终点的数组begin,begin有2001个元素,begin的下标代表终点,begin的元素代表原始起点(最开始的起点),题目可以化简为找出第一个edge,这个edge的起点和终点都有同样的一个原始起点,即形成环。

初始化为每个起点的终点都指向自身为原始起点。然后遍历edges数组,更新新遍历的点,更新原始起点,直至找到环为止。

以example 1为例,

begin 的下标为 0 1 2 3 ... ...

初始化后元素为 0 1 2 3

[1 2] 进入后的为 0 1 1 3,2的原始起点更新为1

[1 3] 进入后的为 0 1 1 1,3的原始起点更新为1

[2 3] 进入后,发现2与3的原始起点一致,均为1,发现环。

源代码如下:

class Solution {
public:
    vector findRedundantConnection(vector>& edges) {
		int s=2001;
		vector begin(s);
		for(int i=0;i





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