当前位置: 首页 > news >正文

【算法与数据结构】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题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题比较属于困难题目&#xff0c;难点在于完成机票、出发机场和到达机场之间的映射关系&#xff0c;再…...

阶段五:深度学习和人工智能(掌握使用TensorFlow或PyTorch进行深度学习)

掌握使用TensorFlow或PyTorch进行深度学习需要具备一定的编程基础和数学基础&#xff0c;包括编程语言、数据结构、算法、线性代数、概率论和统计学等方面的知识。以下是掌握使用TensorFlow或PyTorch进行深度学习的一些基本要求&#xff1a; 了解深度学习的基本概念和原理&…...

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 中设置复选框或单选按钮的默认选中状态&#xff1f;四、表单输入字段中必填属性的用途是什么&#xff1f;五、如何使用 HTML 创建表格&#xff1f;六、解释a标签中目标属性的用途七、如何创建一个点击后会…...

K12484 银行排队(bank)

题目描述 K个人来银行排队办理业务&#xff0c;银行有n个窗口可以同时办理&#xff0c;每个窗口允许有m个人排队&#xff0c;其余的人在银行大厅等待。当某个窗口排队人数少于m时&#xff0c;在大厅等待的人可进入该窗口排队。每个人都有自己要办的业务&#xff0c;每个业务要…...

JAVA实操经验

零&#xff1a; 按照需要&#xff0c;可以使用需要某个类下&#xff08;主要是java提供的&#xff09;的方法来实现某个功能。&#xff08;主要是用在不同类下的方法会进行重写功能不同&#xff09; 方法和构造方法不同&#xff1a;方法是方法&#xff0c;构造方法是构造器&a…...

微信小程序 ios 手机底部安全区适配

在开发微信小程序中&#xff0c;遇到 IOS 全面屏手机&#xff0c;底部小黑条会遮挡页面按钮或内容&#xff0c;因此需要做适配处理。 解决方案 通过 wx.getSystemInfo() 获取手机系统信息&#xff0c;需要拿到&#xff1a;screenHeight&#xff08;屏幕高度&#xff09;&#…...

ReetrantReadWriteLock底层原理

文章目录 一、读写锁介绍二、ReentrantReadWriteLock底层原理1. 读写锁的设计 一、读写锁介绍 现实中有这样一种场景:对共享资源有读和写的操作&#xff0c;且写操作没有读操作那么频繁(读多写少)。在没有写操作的时候&#xff0c;多个线程同时读一个资源没有任何问题&#xf…...

LeetCode力扣每日一题(Java):35、搜索插入位置

一、题目 二、解题思路 1、我的思路&#xff08;又称&#xff1a;论API的重要性&#xff09; 读完题目之后&#xff0c;我心想这题目怎么看着这么眼熟&#xff1f;好像我之前学过的一个API呀&#xff01; 于是我回去翻了翻我之前写的博客&#xff1a;小白备战蓝桥杯&#xf…...

Unity中结构体定义的成员如何显示在窗口中

在Unity中&#xff0c;有时候我们在处理数据的时候会用到结构体定义一些Unity组件相关的数据成员&#xff0c;并且需要在编辑器中拉取对象赋值。比如&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;publ…...

Python3开发环境的搭建

1&#xff0c;电脑操作系统的确认 我的是win10、64位的&#xff0c;你们的操作系统可自寻得。 2&#xff0c;Python安装包的下载 &#xff08;1&#xff09;浏览器种输入网址&#xff1a;https://www.python.org 选择对应的系统&#xff08;我的是win10/64位) &#xf…...

Leetcode 2957. Remove Adjacent Almost-Equal Characters

Leetcode 2957. Remove Adjacent Almost-Equal Characters 1. 解题思路2. 代码实现 题目链接&#xff1a;2957. Remove Adjacent Almost-Equal Characters 1. 解题思路 这一题其实不是很想放上来的&#xff0c;因为其实真的很简单&#xff0c;但是我惊讶地发现当前提交的算法…...

透析跳跃游戏

关卡名 理解与贪心有关的高频问题 我会了✔️ 内容 1.理解跳跃游戏问题如何判断是否能到达终点 ✔️ 2.如果能到终点&#xff0c;如何确定最少跳跃次数 ✔️ 1. 跳跃游戏 leetCode 55 给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。数组中的每个元素代表…...

贵州开放大学形成性考核 平时作业 参考试题

试卷代号&#xff1a;1310 古代汉语专题 参考试题&#xff08;开卷&#xff09; 一、单项选择题&#xff08;每题3分&#xff0c;共10题30分&#xff09; 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. 代码实现 题目链接&#xff1a;2962. Count Subarrays Where Max Element Appears at Least K Times 1. 解题思路 这一题思路上同样很直接&#xff0c;就是找到最大的元素所在的全…...

Mybatis XML 配置文件

我们刚开始就有说Mybatis 的开发有两种方式: 1.注释 2.XML 注解和 XML 的方式是可以共存的 我们前面说的都是注释的方式,接下来是XML方式 XML的方式分为三步 : 1.配置数据库(配在 application.yml 里面) 这个跟注释的配置是一样的,username应该都是一样的,password记得写…...

CCF计算机软件能力认证202309-1坐标变换(其一)(C语言)

ccf-csp计算机软件能力认证202309-1坐标变换&#xff08;其一&#xff09;(C语言版) 题目内容&#xff1a; 问题描述 输入格式 输出格式 样例输入 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 界面进入名称空间 &#xff08;自己的命令空间&#xff09;&#xff0c;点击 创建工作负载 按钮&#xff0c;并填写表单&#xff0c;如下图所示&#xff1a; 字段名称填写内容工作负载类型有状态副本集&#xff0…...

红队攻防实战之Redis-RCE集锦

心若有所向往&#xff0c;何惧道阻且长 Redis写入SSH公钥实现RCE 之前进行端口扫描时发现该机器开着6379&#xff0c;尝试Redis弱口令或未授权访问 尝试进行连接Redis&#xff0c;连接成功&#xff0c;存在未授权访问 尝试写入SSH公钥 设置redis的备份路径 设置保存文件名 …...

六级翻译之印章

好像大房子挺难得 三段式 1Since ancient from now&#xff0c;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…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...