字节跳动算法题(并查集)


[a,b,c] [b, d, f] [g, h] 这种样例,一个框里面的是相同的,简单说就是都是朋友,让你输出最后有几个朋友圈,都是谁?这个样例就是 [a,b,c,d,f] [g,h]
有无大佬可以用java实现一下,实在是想不明白怎么保存父节点
#字节跳动#
全部评论
你已经说了是并查集 那直接用数组嘛!
点赞 回复 分享
发布于 2021-03-10 09:11
这题dfs或者并查集,我只会c++
点赞 回复 分享
发布于 2021-03-10 10:25
https://pastebin.com/sMUwzGbU 并查集就几句话,你对每个元素进行标号,然后合并就可以了
点赞 回复 分享
发布于 2021-03-10 12:02
如果是连续的字符的话 parent['a&(417)#39; -'0'] = &#39;b' - &(11720)#39;0'?,不连续那只能用哈希表 unordered_map<char, char>mp;mp[a] = b,连通分量的个数也可以?
点赞 回复 分享
发布于 2021-03-11 17:46
    public void findFriend(String s, List<List<Integer>> pairs) {         int n = s.length();         int[] father = new int[n];         /*记录秩*/         int[] rank = new int[n];         for(int i = 0; i < n; i++) {             father[i] = i;             rank[i] = 1;         }                  for(List<Integer> pair : pairs) {             union(pair.get(0),pair.get(1),father,rank);         }         char[] sChar = s.toCharArray();         /*key : 根节点   Value: 这个根节点的连通分量*/         Map<Integer,Queue<Character>> map = new HashMap();         for(int i = 0; i < n; i++) {             int root = find(i,father);             if(map.containsKey(root)) {                 map.get(root).offer(sChar[i]);             } else{                 Queue<Character> queue = new LinkedList<>();                 queue.offer(sChar[i]);                 map.put(root,queue);             }         }     }
点赞 回复 分享
发布于 2021-03-13 13:55
dfs一下就出来了😂
点赞 回复 分享
发布于 2021-03-13 20:57

相关推荐

荣耀 通信协议开发 预计20*15
点赞 评论 收藏
分享
双西电 雷达方向 每月6.7千,年终2万
点赞 评论 收藏
分享
评论
点赞
2
分享
牛客网
牛客企业服务