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
package fbOnsite;
import java.util.*;
class UnionFind{
int[] ids;
int count;
public UnionFind(int num) {
ids = new int[num];
Arrays.fill(ids, -1);
count = 0;
} public int find(int id) {
while (id != ids[id]) id = ids[id];
return id;
} public void union(int n1, int n2) {
int root1 = find(n1);
int root2 = find(n2);
ids[root2] = root1;
} public boolean isConnected(int n1, int n2) {
return find(n1) == find(n2);
}
} public class EmailUser {
public int commonUser(HashMap<Integer, List<Character>> map) {
int size = map.size();
UnionFind uf = new UnionFind(10);
HashMap<Character, Integer> emailToUser = new HashMap<Character, Integer>();
for (int user : map.keySet()) {
uf.ids[user] = user;
uf.count++;
List<Character> emailList = map.get(user);
for (Character eachEmail : emailList) {
if (!emailToUser.containsKey(eachEmail)) {
emailToUser.put(eachEmail, user);
}
else {
int oriUser = emailToUser.get(eachEmail);
if (!uf.isConnected(user, oriUser)) {
uf.union(oriUser, user);
uf.count--;
}
}
}
}
for (int elem : uf.ids)
System.out.print(elem);
return uf.count;
} /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
EmailUser sol = new EmailUser();
HashMap<Integer, List<Character>> map = new HashMap<Integer, List<Character>>();
map.put(0, new ArrayList<Character>());
map.put(1, new ArrayList<Character>());
map.put(2, new ArrayList<Character>());
map.put(3, new ArrayList<Character>());
map.put(4, new ArrayList<Character>());
map.put(5, new ArrayList<Character>());
map.put(6, new ArrayList<Character>());
map.get(0).add('x');
map.get(0).add('y');
map.get(0).add('z');
map.get(1).add('x');
map.get(2).add('a');
map.get(2).add('b');
map.get(3).add('y');
map.get(3).add('z');
map.get(4).add('b');
map.get(5).add('m');
map.get(6).add('t');
map.get(6).add('b');
int res = sol.commonUser(map);
System.out.println(res);
} }
FB面经Prepare: Email User的更多相关文章
- FB面经 Prepare: All Palindromic Substrings
Given a string, calculate how many substring is palindrome. Ignore non-char characters. Ignore case; ...
- FB面经 Prepare: Task Schedule
tasks has cooldown time, give an input task id array, output finish time input: AABCA A--ABCA output ...
- FB面经 Prepare: Make Parentheses valid
给一组括号,remove最少的括号使得它valid 从左从右各scan一次 package fb; public class removeParen { public static String fi ...
- FB面经Prepare: Friends Recommendation
有个getFriend() API, 让你推荐你的朋友的朋友做你的朋友,当然这个新朋友不能是你原来的老朋友 package fb; import java.util.*; public class R ...
- FB面经Prepare: Dot Product
Conduct Dot Product of two large Vectors 1. two pointers 2. hashmap 3. 如果没有额外空间,如果一个很大,一个很小,适合scan小的 ...
- FB面经prepare: Count the number of Vector
给一个超级大的排好序的vector [abbcccdddeeee]比如,要求返回[{,a}, {,b}, {,c}, {,d}, {,e}......]复杂度要优于O(N) 分析: 如果是binary ...
- FB面经 Prepare: Largest Island
Find largest island in a board package fb; public class LargestIsland { public int findLargestIsland ...
- FB面经prepare: task schedule II
followup是tasks是无序的. 一开始是有序的,比如说1, 1, 2, 1,一定要先执行第一个task1,然后等task1恢复,再执行第2个task1,再执行task2..... follow ...
- FB面经prepare: Task Schedule
每种task都有冷却时间,比如task1执行后,要经过interval时间后才能再次执行,求总共所需时间. 用HashMap保存每一个task的下一次可以开始执行的最早时间 package TaskS ...
随机推荐
- 网络编程-Mysql-1、数据库的启动关闭,创建数据库,表等基本操作
启动服务端:sudo service mysql start 关闭服务端:suodo service mysql stop 重启服务端:suodo service mysql restart 连接数据 ...
- Django 学习第十一天——中间键和上下文处理器
一.中间键的引入: Django中间件(Middleware)是一个轻量级.底层的"插件"系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出. djang ...
- .Net Core WebAPI 搭建
.Net Core WebAPI 搭建 1.创建项目 使用开发工具为 Visual Studio 2017 2.创建 Controller 实体类 public class Book { public ...
- spark伪分布式的安装
不依赖hadoop 百度分享安装包地址:http://pan.baidu.com/s/1dD4BcGT 点击打开链接 解压 并重命名: 进入spark100目录: 修改配置: Cd conf 配置单击 ...
- npm的一些常用命令(在国内,建议使用cnpm,在淘宝镜像里面下载就行)
npm的一些常用命令(在国内,npm操作可能会比较慢,建议使用cnpm,在淘宝镜像里面下载就行,用法和npm一样) cnpm安装地址,直接安装 npm install cnpm -g --regist ...
- 【Codeforces】【图论】【数量】【哈密顿路径】Fake bullions (CodeForces - 804F)
题意 有n个黑帮(gang),每个黑帮有siz[i]个人,黑帮与黑帮之间有有向边,并形成了一个竞赛完全图(即去除方向后正好为一个无向完全图).在很多年前,有一些人参与了一次大型抢劫,参与抢劫的人都获得 ...
- ubantu16.04安装ns2.34 错误
把ns2.34解压缩之后,sudo ./install 出现的错误: 错误一:安装NS2.34过程中出现如下的错误:tools/ranvar.cc: In member function ‘virtu ...
- DAY01-Python入门学习-计算机硬件
一.Python是编程语言 语言: 一种事物与另外一种事物沟通的介质所以说编程语言是程序员与计算机沟通的介质 什么是编程: 就是程序员用计算机所能理解的表达方式(编程语言)把自己的思维逻辑写下来,编程 ...
- CSS(三)
CSS盒子模型 盒子模型解释 元素在页面中显示成一个方块,类似一个盒子,CSS盒子模型就是使用现实中盒子来做比喻,帮助我们设置元素对应的样式.盒子模型示意图如下: 把元素叫做盒子,设置对应的样式分别为 ...
- Hibernate 映射多对多关联关系
映射多对多,需要建立一张中间表 一共三张表,一个是 Category,一个是 Item,还有一个是 Categories_Items Categories_Items 作为中间表,其包含两个列,分别对 ...