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 ...
随机推荐
- js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码
-1.目录 0.参考 1.页面表现 2. 慢镜头观察:低速网络请求 3. 从头到尾调试:Fiddler 拦截 index.html 并添加 debugger; 4. 快速定位 js 代码 5. 还原被 ...
- ABP给WebApi添加性能分析组件Miniprofiler
在ABP的WebApi中,对其性能进行分析监测是很有必要的.而悲剧的是,MVC项目中可以使用的MiniProfiler或Glimpse等,这些都不支持WebApi项目,而且WebApi项目通常也没有界 ...
- xlrd模块;xlwt模块使用,smtp发送邮件
先安装 pip3 install xlwt pip3 install xlrd import xlwt, xlrd from xlrd.book import Book from xlrd.sheet ...
- Ubuntu16.04 14.04安装配置Caffe(GPU版)
caffe配置过程很长啊,坑非常多,没有linux基础的估计会香菇的.我参考了网上很多的帖子,基本上每个帖子都有或多或少的问题,研究很久最终配置成功.参考过的帖子太多,都记不太清来源了.为了对前人的感 ...
- CommonJs规范详解---【XUEBIG】
CommonJS是服务器模块的规范,Node.js采用了这个规范 1.CommonJs规范的出发点:JS没有模块系统.标准库较少.缺乏包管理工具:为了让JS可以在任何地方运行,以达到Java.C ...
- selenium截取具体元素图片(python版)
原理: 1.截图(整个窗口) 2.获取此元素坐标 element = driver.find_element_by_id("xx") element.location) 3.获取此 ...
- webpack 打包测试和生产多个版本
cross-env修改生产环境变量 npm i --save-dev cross-env 在package.json里这么配置 npm run build就是打包到生产环境 npm run build ...
- CodeForces - 1013C C - Photo of The Sky 贪心
题目链接: https://vjudge.net/problem/1735276/origin 题目大意与思路: 题目的基本意思就是求一个矩形的最小面积. 这个可以用最大最小值, 将他们分为X和Y组. ...
- K个排序链表的合并(Hard)
问题来源:选自leetCode 23:合并K个排序链表 问题描述: 题目给定信息: 不确定需要合并的链表的数目,但依然要求我们把给定的这些有序链表合并成一个链表,并且保证合并的链表依然是有序的. 问题 ...
- react-native android textinput显示不全的问题
出现的问题 如下图 原因 android 输入框默认带有上下内边距 解决 将Textinput元素样式的垂直内边距设置为0 paddingVertical: 0