回溯 Leetcode 332 重新安排行程

重新安排行程

Leetcode 332

學習記錄自代碼隨想錄

給你一份航線列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飛機出發和降落的機場地點。請你對該行程進行重新規劃排序。
所有這些機票都屬于一個從 JFK(肯尼迪國際機場)出發的先生,所以該行程必須從 JFK 開始。如果存在多種有效的行程,請你按字典排序返回最小的行程組合。
例如,行程 [“JFK”, “LGA”] 與 [“JFK”, “LGB”] 相比就更小,排序更靠前。
假定所有機票至少存在一種合理的行程。且所有的機票 必須都用一次 且 只能用一次。

輸入:tickets = [[“MUC”,“LHR”],[“JFK”,“MUC”],[“SFO”,“SJC”],[“LHR”,“SFO”]]
輸出:[“JFK”,“MUC”,“LHR”,“SFO”,“SJC”]
輸入:tickets = [[“JFK”,“SFO”],[“JFK”,“ATL”],[“SFO”,“ATL”],[“ATL”,“JFK”],[“ATL”,“SFO”]]
輸出:[“JFK”,“ATL”,“JFK”,“SFO”,“ATL”,“SFO”]
解釋:另一種有效的行程是 [“JFK”,“SFO”,“ATL”,“JFK”,“ATL”,“SFO”] ,但是它字典排序更大更靠后。

要點:1.回溯模板上修改一些判斷條件;
2.需要開始對車票排序,之后排過序后只要找到一個方案就是所需的字母排序最小的方案;
3.檢查重復的車票,有的車票會重復;
4.檢查使用過的車票以及車票開頭是否等于上次末尾;

方法一:

class Solution {
private:// vector<string> path = {"JFK"};string start = "JFK";vector<vector<string>> result;void backtracking(vector<vector<string>>& tickets, vector<int> used, vector<string> path){if(path.size() == tickets.size() + 1){result.push_back(path);return;}// start = path.back();for(int i = 0; i < tickets.size(); i++){// 已經對車票開始排過序了,所以只要找到一個方案就是所需的字母排序最小的方案if(result.size() > 0) break;// 檢查重復的車票,有的車票會重復if (i > 0 && !used[i - 1] && tickets[i][0] == tickets[i - 1][0] && tickets[i][1] == tickets[i - 1][1]) {continue;}// 檢查使用過的車票以及車票開頭是否等于上次末尾if(used[i] == 1 || tickets[i][0] != start){continue;}start = tickets[i][1];used[i] = 1;path.push_back(tickets[i][1]);backtracking(tickets, used, path);path.pop_back();start = path.back();used[i] = 0;}}
public:vector<string> findItinerary(vector<vector<string>>& tickets){// path.clear();sort(tickets.begin(), tickets.end());vector<string> path = {"JFK"};vector<int> used(tickets.size(), 0);backtracking(tickets, used, path);// sort(result.begin(), result.end());return result[0];}
};

方法二:使用map存儲機票路徑

在這里插入圖片描述

//使用map存儲
class Solution{
private:// 出發機場,<到達機場,標記機場是否使用過>unordered_map<string, map<string, int>> targets;// 注意此處result需要引用,不然輸入的result只是為形參,不改變原來的resultbool backtracking(vector<string>& result, vector<vector<string>>& tickets){if(result.size() == tickets.size() + 1){return true;}// target需要引用以對應更改targets, const防止更改// for(auto& target : targets[result.back()]){for(pair<const string, int>& target : targets[result.back()]){if(target.second > 0){result.push_back(target.first);target.second--;if(backtracking(result, tickets)) return true;  // 這樣一找到結果就能返回result.pop_back();  // 回溯target.second++;  // 回溯}}return false;}public:vector<string> findItinerary(vector<vector<string>>& tickets){targets.clear();// 記錄映射關系,map是有序的,存儲結果自動會排序,1代表沒去過,0代表去過for(const vector<string>& vec : tickets){targets[vec[0]][vec[1]]++;}vector<string> result;result.push_back("JFK");backtracking(result, tickets);return result;}
};

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

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

相關文章

【Datawhale組隊學習:Sora原理與技術實戰】Attention

Attention Attention 注意力&#xff0c;從兩個不同的主體開始。 論文&#xff1a;https://arxiv.org/pdf/1703.03906.pdf seq2seq代碼倉&#xff1a;https://github.com/google/seq2seq 計算方法&#xff1a; 加性Attention&#xff0c;如&#xff08;Bahdanau attention&…

【工商業儲能如何選】Acrel工商業儲能系統解決方案

市場前景 碳中和&#xff1a;全球應對氣候危機重建人與自然和諧關系的共同目標 清潔替代&#xff1a;清潔能源替代化石能源是全球實現碳中和的唯一路徑 能量存儲&#xff1a;儲能技術是解決大比例清潔能源時空分布不平衡的最佳方案 應用場景 隨著“雙碳”目標下的新型電力…

Python+Selenium使用Page Object實現頁面自動化測試

Page Object模式是Selenium中的一種測試設計模式&#xff0c;主要是將每一個頁面設計為一個Class&#xff0c;其中包含頁面中需要測試的元素&#xff08;按鈕&#xff0c;輸入框&#xff0c;標題 等&#xff09;&#xff0c;這樣在Selenium測試頁面中可以通過調用頁面類來獲取頁…

記一次:android學習筆記一(學習目錄-不要看無內容)

學習目錄如下 B站學習的名稱--Android開發從入門到精通(項目案例版) 網址:https://www.bilibili.com/video/BV1jW411375J/ 第0章:安裝 android stoid 參考地址https://blog.csdn.net/adminstate/article/details/130542368 第一章:第一個安卓應用 第二章:用戶界面設…

idea插件開發的時候找不到com.intellij.psi.PsiClass

最近在使用idea上傳接口帶yapi(可視化管理平臺)時遇到com.intellij.psi.PsiClass&#xff0c;在網上看了找到幾種解決方案&#xff0c;這里總結記錄一下&#xff1a; 方法一&#xff1a;在 build.gradle 中的 intellij plugins屬性添加 ‘java’ intellij {version 2020.X.Xpl…

直接修改zynq petalinux編譯出來的rootfs.cpio.gz文件內容

xilinx zynq petalinux 默認編譯打包出的SPI flash燒寫啟動文件是BOOT.BIN&#xff0c;然而每次需要修改rootfs內的文件時都要重新build rootfs 然后再 package一次才能生成新的BOOT.bin文件&#xff0c;地球人都知道petalinux編譯一次是很耗時間的&#xff0c;那么有沒有什么簡…

OpenCV 4基礎篇| OpenCV圖像的拆分和合并

目錄 1. 通道拆分1.1 cv2.split1.1.1 語法結構1.1.2 注意事項1.1.3 代碼示例 1.2 NumPy切片1.2.1 代碼示例 2. 通道合并2.1 cv2.merge2.1.1 語法結構2.1.2 注意事項2.1.3 代碼示例 1. 通道拆分 1.1 cv2.split 1.1.1 語法結構 b,g,r cv2.split(img[, mv]) #圖像拆分為 BGR 通…

【開發工具】GIF 錄屏工具推薦 ( GIF123 - 推薦使用 | GifCam | LICEcap )

文章目錄 一、GIF 錄屏工具推薦1、GIF123 ( 推薦使用 )2、GifCam3、LICEcap 本博客中介紹的 3 款 GIF 錄屏工具下載地址 : https://download.csdn.net/download/han1202012/88905642 也可以到對應的官網獨立下載 : GIF123 : https://gif123.aardio.com/ ;GifCam : https://bl…

FAST-LIO系列-閱讀筆記

近期&#xff0c;閱讀了FAST-LIO、FAST-LIO2以及Faster_LIO論文&#xff0c;這三篇論文都屬于濾波器的SLAM算法&#xff0c;下面記錄一下三個工作的主要貢獻和不同。 FAST-LIO 1.提出了一種計算效率高、魯棒性強的激光雷達-慣性里程測量框架。使用緊密耦合的迭代擴展卡爾曼濾…

報錯:/bin/sh: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8)

解釋&#xff1a;這是shell 警告你無法將當前的區域設置&#xff08;locale&#xff09;更改為 zh_CN.UTF-8&#xff0c;這個警告可能不會影響 fc-cache 命令的實際運行&#xff0c;但它確實表明系統在某些方面可能無法正確地處理與 zh_CN.UTF-8 相關的內容。 1.檢查當前的區域…

2024年口腔護理市場行業未來前景預測:正畸護理用品市場行業分析報告

口腔護理是維護口腔健康的重要步驟&#xff0c;近年來&#xff0c;隨著大眾口腔健康意識的不斷增強&#xff0c;人們對于口腔護理的消費意愿也不斷增加&#xff0c;由此&#xff0c;口腔護理市場的市場規模也比較大。 根據鯨參謀電商數據分析平臺的相關數據顯示&#xff0c;20…

OSCP靶場--Walla

OSCP靶場–Walla 考點(1.hydra http基本認證爆破&#xff1a; 2.sudo -l&#xff1a;python導入外部模塊提權 3.Linux內核提權&#xff1a;cve-2021-4034) 1.nmap掃描 ## ┌──(root?kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.181.97 --min-rate 2000 Starting N…

Linux網絡編程:Socket套接字

一、socket地址API 1、主機字節序和網絡字節序 小端字節序&#xff08;主機字節序&#xff09;是指一個整數的高位字節存儲在內存的高地址處 大端字節序&#xff08;網絡字節序&#xff09;是指一個整數的高位字節存儲在內存的低地址處 判斷機器字節序 #include <stdio.…

RT-DETR算法優化改進: 特征融合漲點篇 | 廣義高效層聚合網絡(GELAN) | YOLOv9

??????本文獨家改進:即結合用梯度路徑規劃(CSPNet)和(ELAN)設計了一種廣義的高效層聚合網絡(GELAN),高效結合RT-DETR,實現漲點。 ??????在多個私有數據集和公開數據集VisDrone2019、PASCAL VOC實現漲點 RT-DETR魔術師專欄介紹: https://blog.csdn.net/…

使用postman測試若依登錄接口API-2

請求方式 由于登錄控制器可知&#xff1a;該請求方式為Post請求 請求地址 在請求路徑欄輸入請求地址&#xff0c;如下圖所示&#xff1a; 參數體 在Body鍵入所需參數&#xff0c;類型選擇raw,數據格式選擇"JSON"&#xff1a;如下圖所示&#xff1a; 認證成功與失敗…

解釋存儲過程和函數的區別,以及它們在MySQL中的用途。如何創建和使用存儲過程和函數?

解釋存儲過程和函數的區別&#xff0c;以及它們在MySQL中的用途。 存儲過程和函數在MySQL中的區別及用途 區別&#xff1a; 返回值&#xff1a; 函數&#xff1a;必須有一個返回值&#xff0c;這可以是一個標量值或一個表。如果沒有明確的RETURN語句&#xff0c;函數將返回N…

香桿箐騎行記,春回大地

2024年3月2日春回大地之際我們校長騎行群再次踏上征程前往香桿箐。這次騎行不僅是一次對身體的鍛煉更是一次心靈的洗禮。 清晨的陽光灑滿大地我們從郊野公園后門出發踏上了前往香桿箐的道路。沿途的風景如畫綠樹成蔭鮮花盛開讓人心曠神怡。我們沿著山路蜿蜒前行感受著大自然的韻…

正則表達式-分組

1、oracle-正則表達式&#xff1a;將09/29/2008 用正則表達式轉換成2008-09-29 select regexp_replace(09/29/2008, ^([0-9]{2})/([0-9]{2})/([0-9]{4})$, \3-\1-\2) replace from dual; 解析&#xff1a;regexp_replace-替換&#xff0c; 第一個參數&#xff1a;需要進行處…

Golang Copy()方法學習

前言 主要是涉及到深淺拷貝相關的&#xff0c;但是在看的一個資料過程中發現他有錯…并且一系列&#xff0c;復制粘貼他的&#xff0c;也都錯了。 錯誤文章指路 很顯然&#xff0c;Copy是深拷貝啊&#xff01;&#xff01;&#xff01; Copy功能 copy的代碼很少&#xff0c…

chatgp4 教我學搭建網站1-課程目錄

Prerequisite 讓我們為學習如何建立網站規劃一個先修課程。我們將從0.1開始&#xff0c;不直接進入網站建設本身&#xff1a; 0.1 網絡技術基礎&#xff1a;了解互聯網如何工作&#xff0c;包括域名系統&#xff08;DNS&#xff09;、HTTP/HTTPS協議等。 0.2 HTML基礎&#x…