zoukankan      html  css  js  c++  java
  • 332. Reconstruct Itinerary

        /*
         * 332. Reconstruct Itinerary 
         * 2016-3-14 by Mingyang
         * 这道题给我们一堆飞机票,让我们建立一个行程单,如果有多种方法,取其中字母顺序小的那种方法。
         * 这道题的本质是有向图的遍历问题,那么LeetCode关于有向图的题只有两道Course Schedule和Course Schedule II,
         * 而那两道是关于有向图的顶点的遍历的,而本题是关于有向图的边的遍历。!!!!!!!!!!!!!!!!!!
         * 每张机票都是有向图的一条边,我们需要找出一条经过所有边的路径,那么DFS是我们的不二选择。
         * 代码前半段都在准备工作。把所有的tickets全部装进一个map,string对应了一个priority queue
         * 后半段dfs中,找出第一个顺序的结果。最终输出是从最后一个开始,一个一个往前退的情况下addFirst加起来的
         * 关键点:记住,我们这里是一个一个往后退的!!
         */
        HashMap<String, PriorityQueue<String>> map = new HashMap<String, PriorityQueue<String>>();
        LinkedList<String> result = new LinkedList<String>();
        public List<String> findItinerary(String[][] tickets) {
            for (String[] ticket : tickets) {
                if (!map.containsKey(ticket[0])) {
                    PriorityQueue<String> q = new PriorityQueue<String>();
                    map.put(ticket[0], q);
                }//用PQ代表了一个顺序
                map.get(ticket[0]).offer(ticket[1]);
            }
            dfs("JFK");
            return result;
        }
        public void dfs(String s) {
            PriorityQueue<String> q = map.get(s);
            while (q != null && !q.isEmpty()) {
                dfs(q.poll());
            }
            result.addFirst(s);
        }
  • 相关阅读:
    百万级数据库优化方案
    MySQL架构及优化原理
    性能优化建议
    索引
    sql语句优化(持续更新)
    sql语句优化原理
    常用命令
    常见问题
    三、范围和生命周期
    【UVa】[11582]Colossal Fibonacci Numbers!
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5657056.html
Copyright © 2011-2022 走看看