力扣 332. 重新安排行程

题目来源:https://leetcode.cn/problems/reconstruct-itinerary/description/

 C++题解(来源代码随想录):

这道题目有几个难点:

  1. 一个行程中,如果航班处理不好容易变成一个圈,成为死循环。解决:用 map<string, int> 中的 int 对使用过的机票进行标记。
  2. 有多种解法,字母序靠前排在前面,让很多同学望而退步,如何该记录映射关系呢 ?解决:map 可以对key值进行排序。
  3. 使用回溯法(也可以说深搜) 的话,那么终止条件是什么呢?解决:行程站点等于ticket数目+1,因为有首发站。找到即返回true,不用遍历其它节点。
  4. 搜索的过程中,如何遍历一个机场所对应的所有机场。解决:使用 unordered_map<string, map<string, int>> ,表示unordered_map<出发机场, map<到达机场, 航班次数>> 。
class Solution {
public:unordered_map<string, map<string, int>> targets;vector<string> res;bool backtracking(int ticketNum) {if(ticketNum + 1  == res.size()) return true;//for (pair<const string, int>& nexttarget : targets[res[res.size()-1]]) {for (auto nexttarget = targets[res[res.size()-1]].begin(); nexttarget != targets[res[res.size()-1]].end(); nexttarget++) {cout<<nexttarget->first<<" ";if(nexttarget->second > 0) {nexttarget->second--;res.push_back(nexttarget->first);if(backtracking(ticketNum)) return true;res.pop_back();nexttarget->second++;}}return false;}vector<string> findItinerary(vector<vector<string>>& tickets) {for(auto ticket:tickets) {targets[ticket[0]][ticket[1]]++;}res.push_back("JFK");backtracking(tickets.size());return res;}
};

这里对tickets的遍历用到了迭代器,指向first要用‘->’;也可使用如下:target.first。注意加const和引用符号&,因为map中的key是不可修改的(虽然这个用法我不太理解,但它真的不加会变,导致循环)。

pair<const string, int>& target : targets[result[result.size() - 1]]

好难。。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15172.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ue4:Dota总结_BP_CameraPawn篇

设计wasd移动&#xff1a; 鼠标拖动视口&#xff1a; 鼠标滚轮调整远近&#xff1a; Beginplay&#xff1a; qe按键旋转&#xff1a; 变量&#xff1a;

word@制表位和列数据对齐@填空下划线制作

文章目录 refs制表位(tab stop)制表位类型 制作对其的下划线填空表单&#x1f47a;利用前导符代替下划线制作待填空下划线 制表位对其列数据模拟简单表格测试数据设置引线使用标尺设置 FAQ refs Insert or add tab stops - Microsoft SupportUsing the ruler in Word - Micros…

【Django】列表数据Paginatior分页,动态返回页码,显示当前页、总页数、跳转页

问题 1、当返回数据较多,如设置每页展示10条,数据接近200条,返回页码范围1~20,前端每个页码都显示的话,就会出现页码超出当前页面,被遮挡的页码无法操作和显示不美观; 2、列表的所在页码,总分页数,跳转不在动态页面的页数 解决 在使用paginator转化为Page对象后,获…

从零开始 Spring Boot 63:Hibernate 继承映射

从零开始 Spring Boot 63&#xff1a;Hibernate 继承映射 图源&#xff1a;简书 (jianshu.com) 关系型数据库设计中是不存在继承概念的&#xff0c;但实体类可以用继承来组织代码结构&#xff0c;所以需要用一种方式将实体类的继承结构映射到表结构。 本文将介绍几种在 JPA&a…

MySQL逻辑架构

MySQL逻辑架构 1. MySQL逻辑架构1.1 连接层1.2 服务层1.3 引擎层 2. SQL执行流程2.1 SQL执行流程2.2 查看SQL执行流程2.3 SQL语法顺序 1. MySQL逻辑架构 分为Connectors层、MySQL服务器对应架构、存储层&#xff1b;MySQL服务器对应架构分为连接层、服务层、引擎层&#xff0c…

RabbitMQ系列(26)--RabbitMQ实现高可用负载均衡

前言&#xff1a;我们以往只能连接一个指定的队列&#xff0c;不能自由地连接其他的队列&#xff0c;当我们连接的那个指定队列宕机了&#xff0c;生产者和消费者都没办法往队列发送消息和消费消息&#xff0c;而且生产者和消费者也不能自动的连接到其他正常运行的队列&#xf…

sqlite维护命令复习学习

前面已经看了一些sqlite命令&#xff0c;例如查看表名&#xff0c;查看表结构等&#xff1b;下面继续看一下&#xff1b; 查看全部表名&#xff1b; 查看单个或全部的表结构&#xff1b; 输出表结构和数据&#xff1b; 使用.output 把查询结果定向到1.txt&#xff1b; 重新定向…

【JavaEE初阶】JavaScript(WebAPI)

文章目录 1.WebAPI背景知识1.1什么是WebAPI1.2什么是API 2.DOM基本概念2.1什么是DOM2.2常用的DOMAPI2.2.1.选中页面元素2.2.2操作元素的属性1. 事件概念2.获取/修改元素内容3. 获取/修改元素属性4.获取/修改表单元素属性5.获取修改样式属性 2.2.3.操作页面节点1.新增节点2.删除…

【Linux】线程

目录 一、Linux线程概念 二、线程的特性 1、线程的优点 2、线程的缺点 3、线程异常 4、线程用途 三、进程与线程 四、Linux线程控制 1、创建线程 2、线程退出 3、等待线程 4、线程取消 5、其他接口 5.1、获取自己的线程id 6、线程分离 五、线程库 六、线程互斥…

Hcip第四次作业

要求&#xff1a; 1.如图连接&#xff0c;合理规划IP地址&#xff0c;所有路由器各自创建一个loopback接口 2.R1再创建三个接口IP地址为201.1.1.1/24、201.1.2.1/24、201.1.3.1/24 R5再创建三个接口IP地址为202.1.1.1/24、202.1.2.1/24、202.1.3.1/24 R7再创建三个接口IP地址为…

使用kubeshpere创建k8s容器日志系统grafana-loki

k8s日志聚合平台grafana-loki&#xff0c;可以统一查看所有容器的日志运行。 效果&#xff1a; 使用kubeshpere创建loki应用十分的方便&#xff0c;减少了很多操作&#xff0c;易用的同时也实用&#xff0c;k8s不再是精通人员才能使用的编排系统。 1、在企业空间中&#xff0…

Mongodb-5.0.18-zip下载与安装

1.下载地址 Download MongoDB Community Server | MongoDB 2.创建一个文件夹和master.cfg的文件 说明&#xff1a;目的是让mongodb存放数据库的位置在mongodb文件里面。 2.1创建名为mongodb的文件夹 2.2master.cfg 说明&#xff1a;在mongodb5.0.18目录下创建master.cfg。 …