FB面经Prepare: Email User
有一些账号,账号里面有一个或多个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相关推荐
- FB面经Prepare: Dot Product
Conduct Dot Product of two large Vectors 1. two pointers 2. hashmap 3. 如果没有额外空间,如果一个很大,一个很小,适合scan小的 ...
- G面经prepare: Reorder String to make duplicates not consecutive
字符串重新排列,让里面不能有相同字母在一起.比如aaabbb非法的,要让它变成ababab.给一种即可 Greedy: 跟FB面经Prepare task Schedule II很像,记录每个char ...
- Java实现Facebook第三方登录
第一次接触Facebook第三方登录,可能有些地方做的并不全面,只是尝试着做了一个小demo,因为国内接入Facebook的项目并不多,并且多数都是Android或IOS的实现,所以资料也特别少,在此 ...
- 如何对两个大型SQL Server数据库中的数据进行快速估计比较,以查看它们是否相等
Bringing impactful analysis into a data always comes with challenges. In many cases, we rely on auto ...
- Facebook APP 注册 登录
一.前言 1.说明Facebook App 注册创建流程. 2.使用JavaScript.Java抓取Facebook会员信息. 3.一些常用Facebook常用帮助链接. 二.创建Fa ...
- facebook第三方账号登录
一.准备工作 1.开通facebook账号,设置后台参数和测试都用得到 注册facebook账号:https://www.facebook.com/ 2.进入开发者后台,如果没有项目的话先创建相关的项 ...
- Google和facebook登录
准备工作是你要在官网创建应用,获取它们给你的id Google 登录 1,在google开发者后台创建应用 2,通过后台进行申请获取id 最近在试着用google登录,当然这只是简单的登录,直接用的它 ...
- Facebook认证登录
原文链接:https://developers.facebook.com/apps/934011906804843/fb-login/quickstart/ JavaScript 版 Facebook ...
- 【oracle】配置恢复管理器Configuring Recovery Manager
第1章 配置恢复管理器Configuring Recovery Manager 组成:GUI或者命令行.可选的恢复目录.RMAN命令和脚本,以及磁带媒介连接 考虑事项:RMAN是一种物理备份方法.其他 ...
最新文章
- 【jquery】文档操作
- 如何利用遗传算法进行自变量降维(代码部分)
- DotNetCore跨平台~2.0提前发布喽
- Redis源码剖析(十二)有序集合跳表实现
- Magic Leap有新动态!成立由斯蒂芬森领头的内容团队
- 量子计算机能让科技发展有多快,量子计算机有多快?
- LeetCode 794. 有效的井字游戏(分类讨论)
- [每日一题] 11gOCP 1z0-053 :2013-10-1 persistent lightweight jobs...........................11
- 七日Python之路--第十一天
- 23.docker export
- html字体颜色代码表,字体颜色代码
- louvain算法python_一种基于Louvain算法的社区发现方法及系统与流程
- 【供应链架构day11】京东履约系统的演进之路
- 【Matlab元胞自动机】元胞自动机双边教室疏散【含源码 1208期】
- 文字烫金效果html,一种浮雕烫金效果的收缩套标的制作方法
- java的intern()方法详解
- 软考中级一般需要备考多久?过来人告诉你
- 用css规范php的输出,一段很小但很实用的CSS打印类(附例子及_php
- Redis非关系型数据库(三)持久化
- 源生js封装ajax
热门文章
- ECharts 实现人民的名义关系图谱 代码开源
- (持续更新)webstorm快捷键及术语翻译
- 结构化并发应用程序——任务执行
- 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口 6...
- 学习Mysql命令行
- android 系统重启关机 方法 非常好的一篇文章
- Apache的网页和安全优化
- lightning接口_苹果手机接口未来将和安卓手机统一——欧盟通过正式决议
- 1594: TomCat的操作系统课(思维)
- java调用net webservice_java调用.net的webservice