721. Accounts Merge
2022/4/8 6:19:02
本文主要是介绍721. Accounts Merge,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
The most important things to solve this problem are:
- recognizing this is a graph problem.
- Select a correct data structure to store the graph:
Map<String, Set<String>> graph = new HashMap<>();
The rest is easy.
DFS+BFS solution:
class Solution { Set<String> visited= new HashSet<>(); public List<List<String>> accountsMerge(List<List<String>> accounts) { List<List<String>> res = new ArrayList<>(); Map<String, String> emailName = new HashMap<>(); Map<String, Set<String>> graph = new HashMap<>(); for(List<String> account:accounts){ String name = account.get(0); for(int i=1;i<account.size();i++){ emailName.put(account.get(i), name); } for(int i=1;i<account.size();i++){ graph.putIfAbsent(account.get(i), new HashSet<>()); for(int j=1;j<account.size();j++){ if(i!=j) graph.get(account.get(i)).add(account.get(j)); } } } Set<String> keys = graph.keySet(); for(String key: keys){ if(visited.contains(key)) continue; List<String> list = new ArrayList<>(); bfs(key, graph, list); Collections.sort(list); String name = emailName.get(key); list.add(0, name); res.add(list); } return res; } private void dfs(String key, Map<String, Set<String>> graph, List<String> list){ if(visited.contains(key)) return; list.add(key); visited.add(key); Set<String> emails = graph.get(key); for(String email:emails){ dfs(email, graph, list); } } private void bfs(String key, Map<String, Set<String>> graph, List<String> list){ Queue<String> queue = new LinkedList<>(); queue.offer(key); visited.add(key); while(!queue.isEmpty()){ int size = queue.size(); for(int i=0;i<size;i++){ String email= queue.poll(); list.add(email); Set<String> neibors = graph.get(email); for(String nei:neibors){ if(!visited.contains(nei)){ queue.offer(nei); visited.add(nei); } } } } } }
这篇关于721. Accounts Merge的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26小白家庭 nas 搭建方案-icode9专业技术文章分享
- 2024-06-23AI大模型企业应用实战(14)-langchain的Embedding
- 2024-06-23AI大模型企业应用实战(15)-langchain核心组件
- 2024-06-23AI大模型企业应用实战(16)-langchain核心组件
- 2024-06-23AI 大模型企业应用实战(06)-初识LangChain
- 2024-06-19EntBot.ai: AI Website Chatbot for Product Guides and Development Doc
- 2024-06-17zero-shot-learning-definition-examples-comparison
- 2024-06-06Package Easy(基于 NSIS 的打包exe安装包工具)使用方法-icode9专业技术文章分享
- 2024-06-06基于 casdoor 的 ELK 开源登录认证解决方案: elk-auth-casdoor-icode9专业技术文章分享
- 2024-05-29Elasticsearch慢查询日志配置