博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
332 Reconstruct Itinerary[PriorityQueue]
阅读量:5896 次
发布时间:2019-06-19

本文共 1926 字,大约阅读时间需要 6 分钟。

这题做了一天。。一天。。上午拿到之后感觉挺easy的,我想像NQueens那样先DFS找到所有的解。结果怎么也无法跟N-Queens类比上,主要是backtracking的时候很难清空从前的状态。最后投了,参考了的dfs。

public List
findItinerary(String[][] tickets) { Map
> map = new HashMap<>(); for (String[] ticket : tickets) { List
dests = map.get(ticket[0]); if (dests == null) { dests = new ArrayList<>(); dests.add(ticket[1]); map.put(ticket[0], dests); } else { dests.add(ticket[1]); } } for (List
dests : map.values()) { Collections.sort(dests); } List
res = new ArrayList<>(); res.add("JFK"); dfs(res, map, "JFK", tickets.length); return res; } // public void dfs(List
res, Map
> map, String src, int length) { if (res.size() == length + 1) { return; } List
dests = map.get(src); if (dests != null && dests.size() > 0) { for (int i = 0; i < dests.size(); i++) { String dest = dests.remove(i); res.add(dest); dfs(res, map, dest, length); if (res.size() == length + 1) return; dests.add(i, dest); res.remove(res.size() - 1); } } }复制代码

上面的代码挺长的。摘抄一个的 priorityqueue的答案:

public class Solution{	HashMap
> map = new HashMap
>(); LinkedList
result = new LinkedList
(); public List
findItinerary(String[][] tickets) { for (String[] ticket : tickets) { if (!map.containsKey(ticket[0])) { PriorityQueue
q = new PriorityQueue
(); map.put(ticket[0], q); } map.get(ticket[0]).offer(ticket[1]); } dfs("JFK"); return result; } public void dfs(String s) { PriorityQueue
q = map.get(s); while (q != null && !q.isEmpty()) { dfs(q.poll()); } result.addFirst(s); }}复制代码

另外这题还可以用欧拉通路来做: https://leetcode.com/discuss/84659/short-ruby-python-java-c

投了投了。


另外,今天发现一个人的刷题博客(http://www.jianshu.com/u/d709e59ac317), 被他的第一篇计划燃得一塌糊涂,人的意志力、执行力强起来真让人感动。

转载于:https://juejin.im/post/5a31315551882531e944cf9a

你可能感兴趣的文章
【转载】面试_现在有4个石头,1000层的楼房,需要测定这个石头破碎的高度。求最少多少次一定可以测出来。...
查看>>
RAID0、RAID1、RAID0+1、RAID5原理介绍
查看>>
指针加减法运算的“定义域”
查看>>
sscanf与正则表达式
查看>>
XP和Scrum的比较
查看>>
Ethernet IP TCP UDP 协议头部格式
查看>>
请高手指点如何提高笔记本WIFI网络速度
查看>>
前端必读:浏览器内部工作原理
查看>>
现代软件工程讲义 8 软件的血型
查看>>
Android自定义GridView显示一行,并且可以左右滑动
查看>>
【web开发】spring+hibernate4支持中文排序
查看>>
Python开发:关于__name__
查看>>
通过分析内存来优化.NET程序
查看>>
SQL Server 限制IP登陆(登陆触发器运用)
查看>>
优化技术之Android UI优化
查看>>
Windows的TCP协议参数
查看>>
hdu 4640 Island and study-sister
查看>>
C# txt格式记录时间,时间对比,决定是否更新代码记录Demo
查看>>
excel 导入mysql
查看>>
CMAKE 生成VS2008静态库工程 与 CMAKE使用,CMakeLists.txt编写总结
查看>>