【算法与数据结构】332、LeetCode重新安排行程
文章目录
- 一、题目
- 二、解法
- 三、完整代码
所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。
一、题目


二、解法
思路分析:本题比较属于困难题目,难点在于完成机票、出发机场和到达机场之间的映射关系,再一个难点就是在所有结果当中选择字典排序靠前的结果。为解决以上问题,本题选择unordered_map<string, map<string, int>>作为映射数组,第一个出发机场是JFK无需排序,但是到达机场需要排序,选择map,它可以根据字典自动的进行字典排序。构造一个unordered_map<string, map<string, int>> targets数组,分别代表 <出发机场, <到达机场, 航班次数>>。关于hash表的有关内容,可以看哈希表理论基础。至于映射关系,unordered_map可以像数组一样用key值进行检索操作。targets[ vec[0] ][ vec[1] ]就进行了两次检索。有关unordered_map的博客资料:C++中的unordered_map用法详解。
程序如下:
class Solution {
private:vector<string> result;vector<string> path;int nticket;unordered_map<string, map<string, int>> targets; // <出发机场, <到达机场, 航班次数>>, map会自动的字典排序(根据相同的出发机场就根据到达机场排序)bool backtracking(int nticket) {if (result.size() == nticket + 1) return true; // 终止条件为结果数组长度=机票数加一for (pair<const string, int>& target : targets[result[result.size() - 1]]) { // 遍历相同出发机场的到达机场,例如JFK有ATL,SFO两种,依次迭代//cout << target.first << " " << target.second << endl;if (target.second > 0) { // 记录达到机场是否飞过, 大于0说明没有飞过result.push_back(target.first); // 处理节点target.second--;if (backtracking(nticket)) return true; // 递归result.pop_back(); // 回溯target.second++;}}return false;}
public:vector<string> findItinerary(vector<vector<string>>& tickets) {nticket = tickets.size();for (const vector<string>& vec : tickets) { // 用临时变量vec遍历tickets数组, 例如,第一次遍历会将tickets[0]中的"JFK", "SFO"分别赋值给vec[0]和vec[1]// vec[0]和vec[1]分别代表出发机场和到达机场//cout << vec[0] << " " << vec[1] << endl;targets[ vec[0] ][ vec[1] ]++; // 记录映射关系,int 初始化时为0,++之后变为1// 查找key值为vec[0]的map value,在从map中查找key值为vec[1]的value, 令其value++}result.push_back("JFK"); // 起始机场backtracking(tickets.size());return result;}
};
三、完整代码
# include <iostream>
# include <string>
# include <vector>
# include <map>
# include <unordered_map>
using namespace std;class Solution {
private:vector<string> result;vector<string> path;int nticket;unordered_map<string, map<string, int>> targets; // <出发机场, <到达机场, 航班次数>>, map会自动的字典排序(根据相同的出发机场就根据到达机场排序)bool backtracking(int nticket) {if (result.size() == nticket + 1) return true; // 终止条件为结果数组长度=机票数加一for (pair<const string, int>& target : targets[result[result.size() - 1]]) { // 遍历相同出发机场的到达机场,例如JFK有ATL,SFO两种,依次迭代//cout << target.first << " " << target.second << endl;if (target.second > 0) { // 记录达到机场是否飞过, 大于0说明没有飞过result.push_back(target.first); // 处理节点target.second--;if (backtracking(nticket)) return true; // 递归result.pop_back(); // 回溯target.second++;}}return false;}
public:vector<string> findItinerary(vector<vector<string>>& tickets) {nticket = tickets.size();for (const vector<string>& vec : tickets) { // 用临时变量vec遍历tickets数组, 例如,第一次遍历会将tickets[0]中的"JFK", "SFO"分别赋值给vec[0]和vec[1]// vec[0]和vec[1]分别代表出发机场和到达机场//cout << vec[0] << " " << vec[1] << endl;targets[ vec[0] ][ vec[1] ]++; // 记录映射关系,int 初始化时为0,++之后变为1// 查找key值为vec[0]的map value,在从map中查找key值为vec[1]的value, 令其value++}result.push_back("JFK"); // 起始机场backtracking(tickets.size());return result;}
};int main() {Solution s1;vector<vector<string>> tickets = { {"JFK", "SFO"}, {"JFK", "ATL"}, {"SFO", "ATL"}, {"ATL", "JFK"}, {"ATL", "SFO"} };vector<string> result = s1.findItinerary(tickets);for (vector<string>::iterator jt = result.begin(); jt != result.end(); jt++) {cout << *jt << " ";}system("pause");return 0;
}
end
相关文章:
【算法与数据结构】332、LeetCode重新安排行程
文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题比较属于困难题目,难点在于完成机票、出发机场和到达机场之间的映射关系,再…...
阶段五:深度学习和人工智能(掌握使用TensorFlow或PyTorch进行深度学习)
掌握使用TensorFlow或PyTorch进行深度学习需要具备一定的编程基础和数学基础,包括编程语言、数据结构、算法、线性代数、概率论和统计学等方面的知识。以下是掌握使用TensorFlow或PyTorch进行深度学习的一些基本要求: 了解深度学习的基本概念和原理&…...
DevEco Studio IDE 创建项目时候配置环境
DevEco Studio IDE 创建项目时候配置环境 一、安装环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、在配置向导的时候意外关闭配置界面该如何二次配置IDE环境。 打开IDE的界面是这样的。 点击Create Project进行环境配置。 点击OK后出现如…...
HTML面试题---专题二
文章目录 一、前言二、解释input标签中占位符属性的用途三、如何在 HTML 中设置复选框或单选按钮的默认选中状态?四、表单输入字段中必填属性的用途是什么?五、如何使用 HTML 创建表格?六、解释a标签中目标属性的用途七、如何创建一个点击后会…...
K12484 银行排队(bank)
题目描述 K个人来银行排队办理业务,银行有n个窗口可以同时办理,每个窗口允许有m个人排队,其余的人在银行大厅等待。当某个窗口排队人数少于m时,在大厅等待的人可进入该窗口排队。每个人都有自己要办的业务,每个业务要…...
JAVA实操经验
零: 按照需要,可以使用需要某个类下(主要是java提供的)的方法来实现某个功能。(主要是用在不同类下的方法会进行重写功能不同) 方法和构造方法不同:方法是方法,构造方法是构造器&a…...
微信小程序 ios 手机底部安全区适配
在开发微信小程序中,遇到 IOS 全面屏手机,底部小黑条会遮挡页面按钮或内容,因此需要做适配处理。 解决方案 通过 wx.getSystemInfo() 获取手机系统信息,需要拿到:screenHeight(屏幕高度)&#…...
ReetrantReadWriteLock底层原理
文章目录 一、读写锁介绍二、ReentrantReadWriteLock底层原理1. 读写锁的设计 一、读写锁介绍 现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁(读多写少)。在没有写操作的时候,多个线程同时读一个资源没有任何问题…...
LeetCode力扣每日一题(Java):35、搜索插入位置
一、题目 二、解题思路 1、我的思路(又称:论API的重要性) 读完题目之后,我心想这题目怎么看着这么眼熟?好像我之前学过的一个API呀! 于是我回去翻了翻我之前写的博客:小白备战蓝桥杯…...
Unity中结构体定义的成员如何显示在窗口中
在Unity中,有时候我们在处理数据的时候会用到结构体定义一些Unity组件相关的数据成员,并且需要在编辑器中拉取对象赋值。比如: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;publ…...
Python3开发环境的搭建
1,电脑操作系统的确认 我的是win10、64位的,你们的操作系统可自寻得。 2,Python安装包的下载 (1)浏览器种输入网址:https://www.python.org 选择对应的系统(我的是win10/64位) …...
Leetcode 2957. Remove Adjacent Almost-Equal Characters
Leetcode 2957. Remove Adjacent Almost-Equal Characters 1. 解题思路2. 代码实现 题目链接:2957. Remove Adjacent Almost-Equal Characters 1. 解题思路 这一题其实不是很想放上来的,因为其实真的很简单,但是我惊讶地发现当前提交的算法…...
透析跳跃游戏
关卡名 理解与贪心有关的高频问题 我会了✔️ 内容 1.理解跳跃游戏问题如何判断是否能到达终点 ✔️ 2.如果能到终点,如何确定最少跳跃次数 ✔️ 1. 跳跃游戏 leetCode 55 给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表…...
贵州开放大学形成性考核 平时作业 参考试题
试卷代号:1310 古代汉语专题 参考试题(开卷) 一、单项选择题(每题3分,共10题30分) 1.“六书”的具体类别名称始见于( )。 A.《汉书艺文志》 B.《说文解字》 C.《周礼》 2.汉字的…...
Leetcode 2962. Count Subarrays Where Max Element Appears at Least K Times
Leetcode 2962. Count Subarrays Where Max Element Appears at Least K Times 1. 解题思路2. 代码实现 题目链接:2962. Count Subarrays Where Max Element Appears at Least K Times 1. 解题思路 这一题思路上同样很直接,就是找到最大的元素所在的全…...
Mybatis XML 配置文件
我们刚开始就有说Mybatis 的开发有两种方式: 1.注释 2.XML 注解和 XML 的方式是可以共存的 我们前面说的都是注释的方式,接下来是XML方式 XML的方式分为三步 : 1.配置数据库(配在 application.yml 里面) 这个跟注释的配置是一样的,username应该都是一样的,password记得写…...
CCF计算机软件能力认证202309-1坐标变换(其一)(C语言)
ccf-csp计算机软件能力认证202309-1坐标变换(其一)(C语言版) 题目内容: 问题描述 输入格式 输出格式 样例输入 3 2 10 10 0 0 10 -20 1 -1 0 0样例输出 21 -11 20 -10样例解释 评测用例规模与约定 解题思路 1.第一步分析问题&…...
k8s 如何部署Mysql(史上最权威教程)?
Kuboard K8s 部署Mysql5.7-8.x版本 部署Mysql5.7 在 Kuboard 界面进入名称空间 (自己的命令空间),点击 创建工作负载 按钮,并填写表单,如下图所示: 字段名称填写内容工作负载类型有状态副本集࿰…...
红队攻防实战之Redis-RCE集锦
心若有所向往,何惧道阻且长 Redis写入SSH公钥实现RCE 之前进行端口扫描时发现该机器开着6379,尝试Redis弱口令或未授权访问 尝试进行连接Redis,连接成功,存在未授权访问 尝试写入SSH公钥 设置redis的备份路径 设置保存文件名 …...
六级翻译之印章
好像大房子挺难得 三段式 1Since ancient from now,seals have been a symbol of power and certerfiction of identity.seals not only practical but also is a form of art.Seal is an ancient art combining with manafutuer of crafting and desgin of…...
轻量级加密新选择:tiny-AES-c深度解析
轻量级加密新选择:tiny-AES-c深度解析 【免费下载链接】tiny-AES-c Small portable AES128/192/256 in C 项目地址: https://gitcode.com/gh_mirrors/ti/tiny-AES-c 在嵌入式系统与物联网设备等资源受限环境中,数据安全面临着独特挑战。轻量级AES…...
K8s混沌工程叛变:随机宕机暴露的职场PUA
在云原生架构席卷软件世界的今天,Kubernetes(K8s)以其强大的编排能力,成为分布式系统稳定运行的基石。随之兴起的混沌工程,则扮演着“压力测试师”的角色,通过主动注入Pod宕机、网络延迟等故障,…...
2025届学术党必备的十大AI科研方案推荐榜单
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在当下的学术与内容创作范畴之内,对于AI生成文本的检测变得越发严格起来。降AI率…...
3个高效网页资源捕获方案:猫抓插件技术解析与实战指南
3个高效网页资源捕获方案:猫抓插件技术解析与实战指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(Cat-Catch&…...
STM32F407硬件COM事件实战:六步换相避坑指南(附CubeMX配置)
STM32F407硬件COM事件六步换相实战:从CubeMX配置到避坑指南 在无刷电机控制领域,六步换相是最基础也最关键的环节之一。传统软件换相方式存在PWM通道更新不同步的痛点,而STM32F407的硬件COM事件功能恰好能完美解决这个问题。本文将带您深入实…...
从星链到遥感卫星:工程师视角下的轨道摄动实战避坑指南
低轨星座与遥感卫星的轨道摄动实战:工程师避坑手册 当SpaceX的星链卫星以每分钟一颗的速度被发射入轨,当高分系列遥感卫星的成像精度突破亚米级,轨道摄动这个曾经只存在于教科书中的概念,正在成为每个航天工程师的日常挑战。不同…...
Zynq Linux FPGA Manager实战:5分钟搞定PL配置(含bit转bin避坑指南)
Zynq Linux FPGA Manager实战:5分钟搞定PL配置(含bit转bin避坑指南) 第一次在Zynq开发板上尝试配置PL逻辑时,我盯着Vivado生成的.bit文件发愁——官方文档里提到的PCAP、ICAP协议像天书一样,而网上各种教程要么步骤不全…...
MaxENT模型结果美化不求人:手把手教你用MATLAB自定义ROC与Omission曲线样式(附配色方案)
MaxENT模型结果可视化进阶:MATLAB定制化ROC与Omission曲线全攻略 科研图表的美观程度直接影响论文的发表成功率。许多生态学研究者在使用MaxENT进行物种分布建模时,常对默认生成的HTML报告图表样式感到不满——单调的配色、缺乏细节的线条以及不符合期刊…...
LangChain消息系统深度解析:从OpenAI格式到Claude 3.5,如何设计一个健壮的对话状态机?
LangChain消息系统架构设计:构建企业级对话状态机的工程实践 在当今AI应用开发领域,对话系统的复杂度和功能性需求正呈指数级增长。从简单的单轮问答到需要维护长期记忆、处理多模态输入、执行工具调用的复杂Agent系统,开发者面临的挑战已远超…...
Three.js面试必备:从光源类型到性能优化的20个高频考点解析
Three.js面试深度攻略:从核心原理到性能优化的20个技术要点 当面试官抛出"Three.js的光照系统如何影响渲染性能"这类问题时,你是否能条理清晰地拆解环境光与平行光的计算差异?面对"如何实现自定义着色器优化建筑可视化项目的渲…...
