注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
最近看到大佬们发了一拼有趣最近的店面题 找相似的images
题目链接
https://www.1point3acres.com/bbs ... 6orderby%3Ddateline
看到之前也有人发说是用union find比较好解。自己用java写了一个试试。希望大佬们能指教
- public static List<List<String>> findSim(Map<String, List<String>> map) {
- Map<String, String> parents = new HashMap<>()
- Map<String, TreeSet<String>> unions = new HashMap<>();
-
- for (String key : map.keySet()) {
- parents.put(key, key)
- for (String v : map.get(key)) {
- parents.put(v,v)
- }
- }
-
- for (String key : map.keySet()) {
- String p = find(key, parents);
- for (String v : map.get(key)) {
- parents.put(find(v, parents), p);
- }
- }
-
- for (String key : map.keySet()) {
- String p = find(key, parents);
- if (!unions.containsKey(p)) {
- unions.put(p, new TreeSet<String>());
- }
- unions.get(p).add(p);
- for (String v : map.get(key)) {
- unions.get(p).add(v);
- }
- }
- List<List<String>> res = new ArrayList<>();
- for (String key : unions.keySet()) {
- List<String> cur = new ArrayList<>();
- for (String val : unions.get(key)) {
- cur.add(val);
- }
- res.add(cur);
- }
- return res;
- }
复制代码
|