leetcode547
public class Solution {
private void dfs(int[,] M, int[] visited, int i)
{
for (int j = ; j < M.GetLength(); j++)
{
if (M[i, j] == && visited[j] == )
{
visited[j] = ;
dfs(M, visited, j);
}
}
}
public int FindCircleNum(int[,] M)
{
int[] visited = new int[M.GetLength()];
int count = ;
for (int i = ; i < M.GetLength(); i++)
{
if (visited[i] == )
{
dfs(M, visited, i);
count++;
}
}
return count;
}
}
这是第一种方法,主要是使用dfs来实现。
下面是第二种方法,是同学用python写的,我翻译成了C#,这种思路是union find。
public class Solution {
public int FindCircleNum(int[,] M)
{
var N = M.GetLength();
var groups = N;
var leads = new int[N];
for (var i = ; i < N; i++)
{
leads[i] = i;
} for (var i = ; i < N; i++)
{
for (var j = i + ; j < N; j++)
{
if (M[i, j] == )
{
var lead1 = find(i, leads);
var lead2 = find(j, leads);
if (lead1 != lead2)
{
leads[lead1] = lead2;
groups--;
}
}
}
}
return groups;
} private int find(int x, int[] parents)
{
if (parents[x] == x)
{
return x;
}
else
{
return find(parents[x], parents);
}
}
}
从耗时角度来看,第一种效率略高一些。
https://leetcode.com/problems/friend-circles/#/description
leetcode547的更多相关文章
- [Swift]LeetCode547. 朋友圈 | Friend Circles
There are N students in a class. Some of them are friends, while some are not. Their friendship is t ...
- Leetcode547: Friend Circles 朋友圈问题
问题描述 在一个班级里有N个同学, 有些同学是朋友,有些不是.他们之间的友谊是可以传递的比如A和B是朋友,B和C是朋友,那么A和C也是朋友.我们定义 friend circle为由直接或者间接都是朋友 ...
- Leetcode547 朋友圈解题报告 (DFS
题目描述: 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递性.如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友.所谓的朋友圈,是指所有朋 ...
- [Swift]经典解题思路:联合查找Union Find
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 并查集算法Union-Find的思想、实现以及应用
并查集算法,也叫Union-Find算法,主要用于解决图论中的动态连通性问题. Union-Find算法类 这里直接给出并查集算法类UnionFind.class,如下: /** * Union-Fi ...
随机推荐
- RabbitMQ Study
python pika install: pip install pika Chinese rabbitmq doc: http://rabbitmq.mr-ping.com/PIKA lib doc ...
- HttpClient通信
1.背景 大多数系统功能和代码都是自己写的,自己用,但是在有些情况下,我们可以利用已经存在的系统,完成对自己实现相对很麻烦的功能,这些一般代价相对较大,自己不可能专门写一个系统或者太过很复杂的代码来完 ...
- spring @Autowired注入的原理
只知道如何用Autowired注解,知道可以替代set,get方法,很方便,却一直不知道,为什么可以代替 今天探索一下原因,所谓知其然还要知其所以然,才能理解的更好,记忆的更牢,才能转化为自己的知识. ...
- getServletContext()方法详解
javax.servlet.ServletContext接口 一个servlet上下文是servlet引擎提供用来服务于Web应用的接口.Servlet上下文具有名字(它属于Web应用的名字)唯一映射 ...
- BZOJ2946 Poi2000 公共串 【后缀自动机】
Description 给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 任务: l 读入单词 l 计算最长公共子串的长度 l 输出结果 Input 文件的第一行是整数 n,1<=n& ...
- tableau-详细级别表达式——2、阵列分析
tableau做阵列分析 合作时间越长的客户对销售额的贡献越大吗? 下面的视图按照客户首次购买的年份将客户分组,以便对比各个阵列的年度销售贡献额. 每个客户的最早订单日期将体现出首次购买日期.不过,由 ...
- Create A .NET Core Development Environment Using Visual Studio Code
https://www.c-sharpcorner.com/article/create-a-net-core-development-environment-using-visual-studio- ...
- WinForm窗体继承自定义的模板窗体出错
在开发Winform程序的时候,我们往往需要根据需要做一些自定义的控件模块,这样可以给系统模块重复利用,或者实现更好的效果等功能.而今天自定义一个窗体,然后子窗体继承的时候出现了一点问题. 问题: 在 ...
- 关于浏览器和IIS基础的简单理解
浏览器 输入域名或者IP地址,按回车访问后:发生了什么??IIS是如何工作的?为什么能这么工作?? 1 浏览器和IIS 分别是两个应用程序:浏览器访问网址实际就是 两个应用程序的数据交互往来: ...
- Beyond Compare3 注册密钥和添加到右键菜单
本人使用的是 Beyond Compare 3 ,版本 3.3.8(build 16340),密钥应收Beyond Compare 3都能够使用. 如想查看密钥,请参考本文末尾的隐藏内容 Beyond ...