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<int> findRedundantConnection(vector<vector<int>>& edges) {
		int s=2001;
		vector<int> begin(s);
		for(int i=0;i<s;i++)
			begin[i] = i;
		for(int i=0;i<edges.size();i++)
		{
			  int x=edges[i][0];
			  int y=edges[i][1];
                        // cout<<x<<"and"<<y<<endl;
			  if(begin[x] == begin[y])
				  return {x,y};
			  int needUpdate=begin[y];
			  for(int j=0;j<s;j++)
			  {
				    if(begin[j]==needUpdate)
						begin[j]=begin[x];
			  }
		}
		return edges[0];
    }
};





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值