小米的面试题
- 1、题目:
假如已知有n个人和m对好友关系(存于数字r),如果两人是直接或间接好友(好友的好友的好友….),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。
例如:n=5,m=3,r={ {1,2},{2,3},{4,5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1,2,3,属于一个朋友圈,4,5属于另一个朋友圈。结果为2个朋友圈。 - 2、怎么解决?拿到这道题有什么思路?别着急,我们可以用学过的数据结构来进行分析这道题。
- 首先我们很容易想到哈希,利用哈希桶来进行做这道题,那么如何实施
- 用vector进行存储人,如果有几个人,我们就存储几个,但是当有交集,也就是说当是好友关系的时候,放进桶里,最终统计vector里面的个数
- 针对这道题就是:首先是1,那么放进vector,再是2因为2是1的好友,就放进桶里,接着进行遍历数组,遍历到3,3是2的好友,就将3链接到2的后面,当遇到4的时候,放进vector中,到5,接到4的下面,最终统计出vector里面的数,就是2,因此有两个朋友圈。
- 3、这种方法可解但是我们仔细想想,时间复杂度是很高的,实现起来也是很麻烦的,因此我们想想有没有一种新的方法可以降低时间复杂度,很好的进行实现的,于是就出现了一种新的数据结构:并查集。