​LeetCode刷题实战332:重新安排行程

【LeetCode】Day201-重新安排行程 332.重新安排行程【困难】-图、回溯法、dfs、欧拉路径、哈希表、优先队列 阅读详情

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 重新安排行程,我们先来看题面:

https://leetcode-cn.com/problems/reconstruct-itinerary/

You are given a list of airline tickets where tickets[i] = [fromi, toi] represent the departure and the arrival airports of one flight. Reconstruct the itinerary in order and return it.

All of the tickets belong to a man who departs from "JFK", thus, the itinerary must begin with "JFK". If there are multiple valid itineraries, you should return the itinerary that has the smallest lexical order when read as a single string.

For example, the itinerary ["JFK", "LGA"] has a smaller lexical order than ["JFK", "LGB"].

You may assume all tickets form at least one valid itinerary. You must use all the tickets once and only once.

给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。

所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。

例如,行程 ["JFK", "LGA"] 与 ["JFK", "LGB"] 相比就更小,排序更靠前。

假定所有机票至少存在一种合理的行程。且所有的机票 必须都用一次 且 只能用一次。

示例

解题

思路:

用map记录每一个出发的城市和它能到达的城市,并用pq来给到达的城市从小到大排序

DFS,每次获取当前城市能到达的城市

如果它能到达的城市为空,则把它加入结果

否则遍历它能到达的城市,并对每一个城市DFS

把当前城市加入结果

倒序的结果即为所求

class Solution {
    public List<String> findItinerary(List<List<String>> tickets) {
        HashMap<String, PriorityQueue<String>> map = new HashMap();
        for(List<String> ticket: tickets) {
            if(map.containsKey(ticket.get(0))) {
                map.get(ticket.get(0)).add(ticket.get(1));
            } else {
                PriorityQueue<String> temp = new PriorityQueue<String>();
                temp.add(ticket.get(1));
                map.put(ticket.get(0), temp);
            }
        }
        List<String> result = new ArrayList();
        build("JFK", map, result);
        Collections.reverse(result);
        return result; 
    }
    
    void build(String from, HashMap<String, PriorityQueue<String>> map, List<String> res) {
        PriorityQueue<String> cur = map.get(from);
        while(cur!= null && !cur.isEmpty()) {
            String nfrom = cur.poll();
            build(nfrom, map, res);
        }
        res.add(from);
    }
}

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上期推文:

LeetCode1-320题汇总,希望对你有点帮助!

LeetCode刷题实战321:拼接最大数

LeetCode刷题实战322:零钱兑换

LeetCode刷题实战323:无向图中连通分量的数目

LeetCode刷题实战324:摆动排序 II

LeetCode刷题实战325:和等于 k 的最长子数组长度

LeetCode刷题实战326:3的幂

LeetCode刷题实战327:区间和的个数

LeetCode刷题实战328:奇偶链表

LeetCode刷题实战329:矩阵中的最长递增路径

LeetCode刷题实战330:按要求补齐数组

LeetCode刷题实战331:验证二叉树的前序序列化

【深度优先搜索】【图论】【推荐】332. 重新安排行程 给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。 例如,行程 ["JFK", "LGA"] 与 ["JFK", "LGB"] 相比就更小,排序更靠前。 假定所有机票至少存在一种合理的行程。且所有的机票 必须都用一次 且 只能用一次。 阅读详情

相关推荐

如何把DeepSeek这个奈斯工具接入到Pycharm里

DeepSeek接入到Pycharm中,提高编程效率,以及帮助解决遇到的问题。

学无止境,何以言满 2623

【LeetCode】332. 重新安排行程

暴力回溯到欧拉通路,从无脑到数学!

woodwhale的博客 793

ENSP内使用wireshark进行抓包,并且解析icmp报文

前四位:54 89 98 e8 20 38 为ip报文包的mac地址也就是物理地址。一开始进行抓包是没有icmp报文的,需要我们在ensp中使用pc1请求联通pc9。协议编号后分别为:ip版本、ip首部报文长度、服务类型、ip报文总长度。最后为校验和 、源ip地址、目的ip、从08 00开始为真正的数据。我们需要实验的端口为:0/0/4,也就是抓包第三个交换机内的报文。其中显示的icmp报文就是我们需要解析的ip报文。源mac地址后跟着的就是协议编号: 08 00。根据ip报文包的结构我们进行解析。

2301_81713278的博客 2138

力扣332 重新安排行程 Java回溯解法 集合排序法和map集合映射法两个角度深入解析

力扣第332题深入解析,从集合排序的回溯开始一步步优化,最终解析ma映射法的意义,让你清楚理解为什么要采取map和采取map映射的好处。

qq_17224327的博客 1624

南邮-软件设计实验(C++版)

南邮软件设计 A档 一、分数统计 课题内容:   设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。 课题要求: (1)输入某班级学生的姓名、分数; (2)对(1)的分数进行降幂排列并输出; (3)具有输入输出界面。 示例代码: #include<bits/stdc++.h> using...

Dainelcw 1万+

游戏资源解包神器NSCB实战:手把手教你提取Switch游戏视频(nsm转MP4)

本文详细介绍了如何使用NSCB工具链从Switch游戏中提取nsm视频和hca音频资源,并将其转换为可编辑的MP4和MP3格式。通过NSC Builder、CriPakTools等工具的分步操作指南,帮助内容创作者高效获取游戏资源,同时提供音视频同步合成、批量处理等高级技巧,为创意素材制作提供完整解决方案。

weixin_29197835的博客 888

Leetcode(332)——重新安排行程

Leetcode(332)——重新安排行程 题目 给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。 例如,行程 [“JFK”, “LGA”] 与 [“JFK”, “LGB”] 相比就更小,排序更靠前。 假定所有机票至少存在一种合理的行程。且所有的机票

KCDCY的博客 604

告别‘小爱同学’:用ESP32-S3和esp-sr SDK,从零打造一个离线语音助手(含完整代码)

本文详细介绍了如何利用ESP32-S3芯片和esp-sr SDK从零构建一个离线语音助手,涵盖硬件选型、声学设计、SDK配置及低功耗优化等关键步骤。通过实战案例和完整代码,帮助开发者实现自定义唤醒词和命令词,打造低成本、高隐私的本地语音控制解决方案。

weixin_29041195的博客 371

算法学习——LeetCode力扣回溯篇4(332. 重新安排行程、51. N 皇后、37. 解数独)

算法学习——LeetCode力扣回溯篇4(332. 重新安排行程、51. N 皇后、37. 解数独)

拉依达不拉跨的博客 1083

别再折腾端口了!Kali Nethunter Kex 图形化桌面连接失败的真正原因与一键修复(附Termux命令)

本文深入分析了Kali Nethunter Kex图形化桌面连接失败的真正原因,包括端口配置变更、依赖缺失和权限问题,并提供了一键修复方案和Termux命令。通过详细的诊断步骤和优化配置,帮助用户快速恢复Kex功能,提升移动安全测试效率。

weixin_42530732的博客 417

别再手动算重量了!用C++给UG/NX写个自动计算零件质量与质心的插件(附完整源码)

本文详细介绍了如何使用C++为UG/NX开发智能质量分析插件,实现零件质量与质心的自动计算。通过结合NXOpen和UF_MODL API,设计高效的数据结构和批量处理机制,大幅提升机械设计效率。文章包含完整源码和实用技巧,帮助工程师告别手动计算,适用于复杂装配体的自动化工程计算。

weixin_30247307的博客 131

LeetCode第332题_重新安排行程

本文详细解析了LeetCode第332题"重新安排行程",这是一道中等难度的图论问题。文章提供了基于欧拉路径和深度优先搜索的解法,包含C#、Python、C++三种语言实现,并进行了详细的性能对比。 核心要点: 使用邻接表存储图结构 通过优先队列或排序确保字典序最小 采用DFS遍历欧拉路径 处理后反转结果得到正确顺序 适用场景: 需要解决机票行程规划等类似图遍历问题的开发者,能够帮助理解欧拉路径的实现和应用。三种语言的实现方式为不同技术栈的开发者提供了参考。

qq_40263592的博客 1579

【图像去噪】基于加权核范数最小化算法实现图像去噪附matlab代码

1 简介 WNNM是一种约束矩阵奇异值稀疏性的低秩算法,在NNM理论基础上增加了核范数权重,有效利用了自然图像的先验信息并提高了核范数的灵活性. 2 部分代码 ​clcclear allclose allnSig = 100;O_Img = double(imread('Monarch.png'));​randn('seed', 0);N_Img = O_Img + nSig* randn(size(O_Img)); ..

qq_59747472的博客 3114

332. 重新安排行程(力扣LeetCode)

拿题目中的示例为例,输入: [[“MUC”, “LHR”], [“JFK”, “MUC”], [“SFO”, “SJC”], [“LHR”, “SFO”]] ,这是有4个航班,那么只要找出一种行程,行程里的机场个数是5就可以了。输入:tickets = [[“JFK”,“SFO”],[“JFK”,“ATL”],[“SFO”,“ATL”],[“ATL”,“JFK”],[“ATL”,“SFO”]]例如,行程 [“JFK”, “LGA”] 与 [“JFK”, “LGB”] 相比就更小,排序更靠前。

m0_73841621的博客 1374

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Leetcode 332. 重新安排行程 C++

Leetcode 332. 重新安排行程 题目 给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 出发。 说明: 如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 [“JFK”, “LGA”] 与 [“JFK”,“LGB”] 相比就更小,排序更靠前 所有的机场都用三个大写字母表示(机场代码)。 假定所有机票至少存在一

weixin_43750513的博客 1341

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【困难】力扣算法题解析LeetCode332:重新安排行程

LeetCode 332题要求从固定起点JFK出发,重新安排机票行程,形成一条使用所有机票且字典序最小的欧拉路径。解题采用Hierholzer算法,通过构建图(使用最小堆存储邻居机场确保字典序),结合栈模拟DFS和后序处理,高效求解。Java实现中利用HashMap建图,PriorityQueue排序邻居,ArrayDeque作栈,LinkedList收集结果,确保时间复杂度O(n log n)。

ylumwd的博客 1068

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LeetCode第 332 题:重新安排行程(C++)

332. 重新安排行程 - 力扣(LeetCode) 哎,想到了优先级队列也想到了dfs,但是没想到怎么处理dfs结尾,欧拉路径这个属实是学到了:重新安排行程 - 重新安排行程 - 力扣(LeetCode) 【图论】什么是欧拉图?如何求欧拉路径?_LiBer_CV的博客-优快云博客 class Solution { public: vector<string> res; //使用优先级队列,小顶堆 unordered_map<string, priority_qu

zj 673

LeetCode 332. 重新安排行程

LeetCode 332. 重新安排行程 给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点, 对该行程进行重新规划排序。所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该 行程必须从 JFK 出发。 说明: 如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 ["JFK", "LGA"] 与 ["JF...

缇欧的咪西 771

Java实现 LeetCode 332 重新安排行程

332. 重新安排行程 给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 出发。 说明: 如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 [“JFK”, “LGA”] 与 [“JFK”, “LGB”] 相比...

南 墙 1万+

LeetCode332.重新安排行程

LeetCode332.重新安排形成

Love Peace 856

力扣日记3.3-【回溯算法篇】332. 重新安排行程

见注释思路来源于代码随想录。

RobinChan730的博客 643

力扣困难题,332. 重新安排行程

另一种有效的行程是 ["JFK","SFO","ATL","JFK","ATL","SFO"] ,但是它字典排序更大更靠后。假定所有机票至少存在一种合理的行程。且所有的机票 必须都用一次 且 只能用一次。别傻乎乎的手动排序啦,Java已经帮我们实现了,那就是PriorityQueue。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。请你对该行程进行重新规划排序。(肯尼迪国际机场)出发的先生,所以该行程必须从。相比就更小,排序更靠前 ,得出要根据字典排序。比如例二,JFK->SFO,ATL。

2201_75927593的博客 554

leetcode第332题重新安排行程

leetcode第332题重新安排行程 思路: Map<String,Map<String,Map>> map = new Map<起始地,<目的地,机票的数量>>() 记录机票之间的映射关系 从JFK开始枚举,利用映射关系得到我要去的目的地和这张机票有几个,到了目的地之后,对应的机票减一,从结果的容器中在拿到起始地,减机票。 当我发现当前道路行不通的时候,remove已经加进去地点,从map里的map重新开始取出来,利用for循环,在找一遍合适的道路。

LIMao_link 3572

刷题记录 回溯算法-19:332. 重新安排行程

这道题引申出的内容比较多,所以简单总结一下,不然太容易忘1.使用回溯算法的题目的一个重要特征是数据规模小2.回溯法解决数据规模较大的搜索问题需要做快速筛选返回值跳出循环和避免每次遍历整个搜索集三个修改。

weixin_44610684的博客 836

LeetCode332-重新安排行程

LeetCode332-重新安排行程 题目 给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。 说明: 如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 [“JFK”, “LGA”] 与 [“JFK”, “LGB”] 相比就更小,排序更靠前 所有的机场都用三个大写字母表示(机场代码)。 假定所有机票至少存在一种

viva_la__vida的博客 288
上一篇: 历史上第一个网页它长啥样???
下一篇: 谷歌发布新编程语言,专治SQL各种“不服”
编程IT圈
博客等级 码龄6年 1130粉丝 544原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程IT圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值