【算法與數據結構】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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215120.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215120.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215120.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用yum/dnf管理軟件包

本章主要介紹使用 yum 對軟件包進行管理。 yum 的介紹搭建yum源創建私有倉庫yum客戶端的配置yum的基本使用使用第三方yum源 使用rpm安裝包時經常會遇到一個問題就是包依賴&#xff0c;如下所示。 [rootrhel03 ~]# rpm -ivh /mnt/AppStream/Packages/httpd-2.4.37-41.modulee…

【三維重建】對極幾何

極幾何描述了同一場景或者物體的兩個視點圖像間的幾何關系 可以發現&#xff30;在左右相機的投影點一定在各自的極線上&#xff0c;如果求出極線就能縮小求解對應點的范圍。 本質矩陣對規范化攝像機拍攝的兩個視點圖像間的極幾何關系進行代數描述 規范化相機指的是相機的內參…

人工智能_機器學習063_SVR支持向量機_回歸擬合天貓雙十一銷量方程---人工智能工作筆記0103

之前我們用線性回歸做過天貓雙十一銷量預測的數據,現在我們再來用SVR支持向量機來做一下 首先上面是給出了銷量,對應2009年到2019年的,銷售額 可以看到: X=np.arange(2009,2020)-2008 統一減去2008的話看起來數據比較簡單了 y=np.array([0.5,9.36,52,191,350,571,912,1207,1…

華為OD機試 - 結隊編程(Java JS Python C)

題目描述 某部門計劃通過結隊編程來進行項目開發, 已知該部門有 N 名員工,每個員工有獨一無二的職級,每三個員工形成一個小組進行結隊編程,結隊分組規則如下: 從部門中選出序號分別為 i、j、k 的3名員工,他們的職級分貝為 level[i],level[j],level[k], 結隊小組滿足…

使用perl的Tie::File 模塊刪除文件固定行

使用perl的Tie::File 模塊刪除文件固定行, 為了說明簡單代碼中處理的是固定第二行開始的3行長度。下面給出perl代碼&#xff1a; #! /usr/bin/perl use v5.14; use Tie::File;if (ARGV 0) {say "請輸入一個文件名 !!!";exit 1; }my $filePath $ARGV[0]; tie my ar…

java工程(ajax/axios/postman)向請求頭中添加消息

1、問題概述 在項目中我們經常會遇到需要向請求頭中添加消息的場景&#xff0c;然后后端通過request.getRequest()或者RequestHeader獲取請求頭中的消息。 下面提供幾種前端向請求頭添加消息的方式 2、創建一個springmvc工程用于測試 2.1、創建工程并引入相關包信息 sprin…

C++之STL算法(1)

STL容器算法主要由、、組成&#xff1b; ??algorithm主要有遍歷、比較、交換、查找、拷貝、修改等&#xff1b; 1.遍歷容器for_each for_each()函數用于完成容器遍歷&#xff0c;函數參數如下&#xff1a; for_each(_InIt _First, _InIt _Last, _Fn _Func) 形參&#xff1a…

深度學習 Day10——T10數據增強

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 | 接輔導、項目定制 文章目錄 前言一、我的環境二、代碼實現與執行結果1.引入庫2.設置GPU&#xff08;如果使用的是CPU可以忽略這步&#xff09;3.導入數據4.查…

4-Docker命令之docker update

1.docker update介紹 docker update命令是用于更新一個或多個docker容器的配置 2.docker update用法 docker update [參數] container [container......] [root@centos79 ~]# docker update --helpUsage: docker update [OPTIONS] CONTAINER [CONTAINER...]Update configu…

編寫函數計算一個或不特定多個數的乘積

編寫函數計算一個或不特定多個數的乘積 輸入樣例&#xff1a; 3 2 1 輸出樣例&#xff1a; 6.0000 def caculate(*t):r1for x in t:r*xreturn r s input().split() t [float(x) for x in s] print("%.4f" % caculate(*t))

Docker基礎概念解析:鏡像、容器、倉庫

當談到容器化技術時&#xff0c;Docker往往是第一個被提及的工具。Docker的基礎概念涵蓋了鏡像、容器和倉庫&#xff0c;它們是理解和使用Docker的關鍵要素。在這篇文章中&#xff0c;將深入探討這些概念&#xff0c;并提供更豐富的示例代碼&#xff0c;幫助大家更好地理解和應…

智能優化算法應用:基于混合蛙跳算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于混合蛙跳算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于混合蛙跳算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.混合蛙跳算法4.實驗參數設定5.算法結果6.…

2023年華為HCIA認證H12-811題庫講解

在VRP平臺上&#xff0c;可以通過下面哪種方式返回到上一條歷史命令&#xff1f;&#xff08; &#xff09; A、Ctr1U B、Ctr1P C、左光標 D、上光標 試題答案&#xff1a;BD 試題解析&#xff1a;在VRP系統中&#xff0c;ctrlU為自定義快捷鍵&#xff0c;ct…

路由和網絡周期

### 路由&#xff08;Routing&#xff09;&#xff1a; 1. **路由的概念&#xff1a;** 路由是用于確定用戶在網站或應用程序中所處位置的機制。它可以將不同的 URL 映射到對應的頁面或視圖組件&#xff0c;使得用戶可以通過不同的 URL 訪問不同的內容。 2. **路由器&#xf…

DevEco Studio 3.1IDE環境配置(HarmonyOS 3.1)

DevEco Studio 3.1IDE環境配置&#xff08;HarmonyOS 3.1&#xff09; 一、安裝環境 操作系統: Windows 10 專業版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、環境安裝 IDE下載地址&#xff1a;HUAWEI DevEco Studio和SDK下載和升級 | HarmonyOS開發者 IDE的安裝就是…

Android---Kotlin 學習002

聲明變量 在 Kotlin 中定義一個變量&#xff0c;通過關鍵字 var 開始。然后是變量名&#xff0c;在“:”后緊跟變量類型。 示例1&#xff1a;聲明一個 int 類型的變量 var num:Int 1 示例2&#xff1a;聲明一個 String 類型的變量 var str:String "Hello world&quo…

計算機網絡——期末考試復習資料

什么是計算機網絡 將地理位置不同的具有獨立功能的多臺計算機及其外部設備通過通信線路和通信設備連接起來&#xff1b;實現資源共享和數據傳遞的計算機的系統。 三種交換方式 報文交換&#xff1a;路由器轉發報文&#xff1b; 電路交換&#xff1a;建立一對一電路 分組交換&a…

2024 年 SEO 現狀

搜索引擎優化&#xff08;SEO&#xff09;一直以來都是網絡知名度和成功的基石。隨著我們踏上 2024 年的征程&#xff0c;SEO領域正在經歷重大變革&#xff0c;有些變革已經開始&#xff0c;這對企業、創作者和營銷人員來說既是挑戰也是機遇。 語音搜索 語音搜索曾是一個未來…

可以組成網絡的服務器 - 華為OD統一考試(C卷)

OD統一考試&#xff08;C卷&#xff09; 分值&#xff1a; 200分 題解&#xff1a; Java / Python / C 題目描述 在一個機房中&#xff0c;服務器的位置標識在n*m的整數矩陣網格中&#xff0c;1表示單元格上有服務器&#xff0c;0表示沒有。如果兩臺服務器位于同一行或者同一列…

HTML常用表單元素使用?

目錄 一、常用表單元素使用的關鍵字二、常用表單元素使用的效果與作用&#xff08;1&#xff09;password : 保護用戶的隱私(2) email: 輸入郵件&#xff08;比如QQ郵件&#xff09;(3)、number : 輸入框只能輸入數字&#xff08;4&#xff09;、tel : 常用于輸入電話號&#x…