有一些账号,账号里面有一个或多个email, 如果两个账号有共同的email,则认为这两个账号是同一个人,找出哪些账号是同一个人
输入是这样的:数字是用户,字母是邮箱,有很多人有多个邮箱,找出相同的用户1- {x,y,z}2-{x} 3-{a,b}4-{y, z}5-{b}6-{m}7-{t,b}

账号之间如果有公共email就连边,我觉得要用hashMap, 存(email, user) pair

如果当前user的某个email在hashMap里出现过,当时是user1, 就看user和user1是否connected,否的话就要union,根据Union Find

Union Find Based on Quick Union

 1 package fbOnsite;
 2 import java.util.*;
 3 class UnionFind{
 4     int[] ids;
 5     int count;
 6     public UnionFind(int num) {
 7         ids = new int[num];
 8         Arrays.fill(ids, -1);
 9         count = 0;
10     }
11
12     public int find(int id) {
13         while (id != ids[id]) id = ids[id];
14         return id;
15     }
16
17     public void union(int n1, int n2) {
18         int root1 = find(n1);
19         int root2 = find(n2);
20         ids[root2] = root1;
21     }
22
23     public boolean isConnected(int n1, int n2) {
24         return find(n1) == find(n2);
25     }
26 }
27
28 public class EmailUser {
29     public int commonUser(HashMap<Integer, List<Character>> map) {
30         int size = map.size();
31         UnionFind uf = new UnionFind(10);
32         HashMap<Character, Integer> emailToUser = new HashMap<Character, Integer>();
33         for (int user : map.keySet()) {
34             uf.ids[user] = user;
35             uf.count++;
36             List<Character> emailList = map.get(user);
37             for (Character eachEmail : emailList) {
38                 if (!emailToUser.containsKey(eachEmail)) {
39                     emailToUser.put(eachEmail, user);
40                 }
41                 else {
42                     int oriUser = emailToUser.get(eachEmail);
43                     if (!uf.isConnected(user, oriUser)) {
44                         uf.union(oriUser, user);
45                         uf.count--;
46                     }
47                 }
48             }
49         }
50         for (int elem : uf.ids)
51             System.out.print(elem);
52         return uf.count;
53     }
54
55     /**
56      * @param args
57      */
58     public static void main(String[] args) {
59         // TODO Auto-generated method stub
60         EmailUser sol = new EmailUser();
61         HashMap<Integer, List<Character>> map = new HashMap<Integer, List<Character>>();
62         map.put(0, new ArrayList<Character>());
63         map.put(1, new ArrayList<Character>());
64         map.put(2, new ArrayList<Character>());
65         map.put(3, new ArrayList<Character>());
66         map.put(4, new ArrayList<Character>());
67         map.put(5, new ArrayList<Character>());
68         map.put(6, new ArrayList<Character>());
69         map.get(0).add('x');
70         map.get(0).add('y');
71         map.get(0).add('z');
72         map.get(1).add('x');
73         map.get(2).add('a');
74         map.get(2).add('b');
75         map.get(3).add('y');
76         map.get(3).add('z');
77         map.get(4).add('b');
78         map.get(5).add('m');
79         map.get(6).add('t');
80         map.get(6).add('b');
81         int res = sol.commonUser(map);
82         System.out.println(res);
83     }
84
85 }

转载于:https://www.cnblogs.com/EdwardLiu/p/6569384.html

FB面经Prepare: Email User相关推荐

  1. FB面经Prepare: Dot Product

    Conduct Dot Product of two large Vectors 1. two pointers 2. hashmap 3. 如果没有额外空间,如果一个很大,一个很小,适合scan小的 ...

  2. G面经prepare: Reorder String to make duplicates not consecutive

    字符串重新排列,让里面不能有相同字母在一起.比如aaabbb非法的,要让它变成ababab.给一种即可 Greedy: 跟FB面经Prepare task Schedule II很像,记录每个char ...

  3. Java实现Facebook第三方登录

    第一次接触Facebook第三方登录,可能有些地方做的并不全面,只是尝试着做了一个小demo,因为国内接入Facebook的项目并不多,并且多数都是Android或IOS的实现,所以资料也特别少,在此 ...

  4. 如何对两个大型SQL Server数据库中的数据进行快速估计比较,以查看它们是否相等

    Bringing impactful analysis into a data always comes with challenges. In many cases, we rely on auto ...

  5. Facebook APP 注册 登录

    一.前言        1.说明Facebook App 注册创建流程. 2.使用JavaScript.Java抓取Facebook会员信息. 3.一些常用Facebook常用帮助链接. 二.创建Fa ...

  6. facebook第三方账号登录

    一.准备工作 1.开通facebook账号,设置后台参数和测试都用得到 注册facebook账号:https://www.facebook.com/ 2.进入开发者后台,如果没有项目的话先创建相关的项 ...

  7. Google和facebook登录

    准备工作是你要在官网创建应用,获取它们给你的id Google 登录 1,在google开发者后台创建应用 2,通过后台进行申请获取id 最近在试着用google登录,当然这只是简单的登录,直接用的它 ...

  8. Facebook认证登录

    原文链接:https://developers.facebook.com/apps/934011906804843/fb-login/quickstart/ JavaScript 版 Facebook ...

  9. 【oracle】配置恢复管理器Configuring Recovery Manager

    第1章 配置恢复管理器Configuring Recovery Manager 组成:GUI或者命令行.可选的恢复目录.RMAN命令和脚本,以及磁带媒介连接 考虑事项:RMAN是一种物理备份方法.其他 ...

最新文章

  1. 【jquery】文档操作
  2. 如何利用遗传算法进行自变量降维(代码部分)
  3. DotNetCore跨平台~2.0提前发布喽
  4. Redis源码剖析(十二)有序集合跳表实现
  5. Magic Leap有新动态!成立由斯蒂芬森领头的内容团队
  6. 量子计算机能让科技发展有多快,量子计算机有多快?
  7. LeetCode 794. 有效的井字游戏(分类讨论)
  8. [每日一题] 11gOCP 1z0-053 :2013-10-1 persistent lightweight jobs...........................11
  9. 七日Python之路--第十一天
  10. 23.docker export
  11. html字体颜色代码表,字体颜色代码
  12. louvain算法python_一种基于Louvain算法的社区发现方法及系统与流程
  13. 【供应链架构day11】京东履约系统的演进之路
  14. 【Matlab元胞自动机】元胞自动机双边教室疏散【含源码 1208期】
  15. 文字烫金效果html,一种浮雕烫金效果的收缩套标的制作方法
  16. java的intern()方法详解
  17. 软考中级一般需要备考多久?过来人告诉你
  18. 用css规范php的输出,一段很小但很实用的CSS打印类(附例子及_php
  19. Redis非关系型数据库(三)持久化
  20. 源生js封装ajax

热门文章

  1. ECharts 实现人民的名义关系图谱 代码开源
  2. (持续更新)webstorm快捷键及术语翻译
  3. 结构化并发应用程序——任务执行
  4. 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口 6...
  5. 学习Mysql命令行
  6. android 系统重启关机 方法 非常好的一篇文章
  7. Apache的网页和安全优化
  8. lightning接口_苹果手机接口未来将和安卓手机统一——欧盟通过正式决议
  9. 1594: TomCat的操作系统课(思维)
  10. java调用net webservice_java调用.net的webservice