回溯 Leetcode 332 重新安排行程

news2024/11/16 21:28:24

重新安排行程

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只是为形参,不改变原来的result
    bool 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.coloradmin.cn/o/1479660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用R语言进行主成分和因子分析

一、数据描述 数据来源2013年各地区水泥制造业规模以上企业的各主要经济指标&#xff0c;原始数据来源于2014年&#xff08;《中国水泥统计年鉴》&#xff09;&#xff0c;试对用主成分和因子进行经济效益评价。 地区,企业个数&#xff08;亿元&#xff09;,流动资产合计&…

亚信安慧AntDB之国密算法介绍

近年来&#xff0c;为摆脱对国外技术和产品的过度依赖&#xff0c;建设行业网络安全环境&#xff0c;增强我国行业信息系统安全、可靠的能力&#xff0c;国家有关机关和监管机构站在国家安全和长远战略的高度提出了“推动国密算法应用实施、加强行业安全可控”的要求。 密码算…

感谢信∣企企通再获肯定,中国煤科【天玛智控】SRM项目成功上线,推动煤矿供应链智能化高效协同发展

近日&#xff0c;煤矿智能无人化开采技术引领者【北京天玛智控科技股份有限公司】&#xff08;以下简称“天玛智控”&#xff09;携手企企通打造的SRM数字化采购平台成功上线。系统上线后&#xff0c;实现了天玛智控与供应商之间的信息共享和业务协作&#xff0c;提升采购业务效…

解决android studio build Output中文乱码

1.效果如下所示&#xff1a; 代码运行报错的时候&#xff0c;Build Output报的错误日志中中文部分出现乱码&#xff0c;导致看不到到底报的什么错。 2.解决办法如下&#xff1a; 点击Android studio开发工具栏的Help-Edit Custom VM Options....&#xff0c;Android studio会…

Node.js中的并发和多线程处理

在Node.js中&#xff0c;处理并发和多线程是一个非常重要的话题。由于Node.js是单线程的&#xff0c;这意味着它在任何给定时间内只能执行一个任务。然而&#xff0c;Node.js的事件驱动和非阻塞I/O模型使得处理并发和多线程变得更加高效和简单。在本文中&#xff0c;我们将探讨…

继承-学习2

this关键字&#xff1a;指向调用该方法的对象&#xff0c;一般我们是在当前类中使用this关键字&#xff0c;所以我们常说代表本类对象的引用 super关键字&#xff1a;代表父类存储空间的标识(可看作父类对象的引用) 父类&#xff1a; package ven;public class Fu {//父类成员…

Jenkins笔记(一)

个人学习笔记&#xff08;整理不易&#xff0c;有帮助点个赞&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 目录 一&#xff1a;简单了解 二&#xff1a;什么是DevOps 三&#xff1a;安装Jenkins 四&#xff1…

uniapp实现-审批流程效果

一、实现思路 需要要定义一个变量, 记录当前激活的步骤。通过数组的长度来循环数据&#xff0c;如果有就采用3元一次进行选择。 把循环里面的变量【name、status、time】, 全部替换为取出的那一项的值。然后继续下一次循环。 虚拟的数据都是请求来的, 组装为好渲染的格式。 二…

Diffusion Models/Score-based Generative Models背后的深度学习原理(5):伪似然和蒙特卡洛近似配分函数

Diffusion Models专栏文章汇总&#xff1a;入门与实战 前言&#xff1a;有不少订阅我专栏的读者问diffusion models很深奥读不懂&#xff0c;需要先看一些什么知识打下基础&#xff1f;虽然diffusion models是一个非常前沿的工作&#xff0c;但肯定不是凭空产生的&#xff0c;背…

FaceBook获取广告数据

1、访问 广告管理工具 确认自己登陆的账号下面能看到户。 ​ 2、使用 图谱Api探索工具 生成用户短期口令 ​ 3、get请求(或者浏览器直接打开)访问&#xff1a; https://graph.facebook.com/v19.0/me?fieldsid,name, email&access_token{上一步生成的口令} ​ 4、短期…

ChatGPT4.0 的优势、升级 4.0 为什么这么难以及如何进行升级?

前言 “ChatGPT4.0一个月多少人民币&#xff1f;” ”chatgpt4账号“ ”chatgpt4 价格“ “chatgpt4多少钱” 最近发现很多小伙伴很想知道关于ChatGPT4.0的事情&#xff0c;于是写了这篇帖子&#xff0c;帮大家分析一下。 一、ChatGPT4.0 的优势 &#xff08;PS&#xff1a;…

Tiktok矩阵系统搭建的逻辑和源代码!

很多和我一样从事外贸工具开发的朋友都清楚&#xff0c;TikTok矩阵系统不仅确保了平台的高效运行&#xff0c;还为用户提供了个性化的内容推荐&#xff0c;从而大大提升了用户黏性&#xff0c;因此很多人都乐意去开发类似的工具&#xff0c;下面我们就来说说Tiktok矩阵系统搭建…

常用SQL查询方法与实例

目录 SELECT查询 INSERT查询 UPDATE查询 DELETE查询 JOIN查询 GROUP BY查询 HAVING查询 窗口函数 公共表表达式&#xff08;CTEs&#xff09; 递归查询 透视表 分析函数 解透视 条件聚合 日期函数 合并语句 情况语句 常用SQL查询方法有以下几种&#xff1a; S…

【Android】View 的滑动

View 的滑动是 Android 实现自定义控件的基础&#xff0c;同时在开发中我们也难免会遇到 View 的滑动处理。其实不管是哪种滑动方式&#xff0c;其基本思想都是类似的&#xff1a;当点击事件传到 View 时&#xff0c;系统记下触摸点的坐标&#xff0c;手指移动时系统记下移动后…

全志XR806 FreeRTOS快速开发入门

RTOS 快速开发入门 XR806 是一颗高集成度无线应用MCU&#xff0c;其集成了ARMv8-M 内核、IEEE 802.11b/g/n Wi-Fi 子系统、BLE 5.0子系统、电源管理系统、高级别的安全系统以及丰富的外设接口&#xff0c;具有优秀的射频性能、稳定性、可靠性和超低功耗。 芯之联软件开发平台…

IIS发布PHP网站字体404解决办法

最近在使用 IIS 发布 PHP 网站时&#xff0c;我遇到了一个前端问题&#xff0c;即字体库文件 404 错误。这个问题的根本原因是 IIS 未能正确识别字体文件类型&#xff0c;导致浏览器在加载页面时无法正确获取所需字体资源&#xff0c;进而触发了404错误。这样的问题会导致网站页…

量化投资实战(一)之K线图策略

点赞、关注再看&#xff0c;养成良好习惯 Life is short, U need Python 量化投资实战系列&#xff0c;不断更新中 1. K线图简介 K 线图&#xff08;Candlestick Charts&#xff09;又称为“蜡烛图”、“阴线图”等。股市及期货市场中的 K 线图的画法包含四个数据&#xff0c;…

ETH网络中的区块链

回顾BTC网络的区块链系统 什么是区块链&#xff1f;BTC网络是如何运行的&#xff1f;BTC交易模式 - UXTO ETH网络中的区块链 ETH网络的基石依旧是 区块链。上面 什么是区块链&#xff1f; 的文章依旧适用。 相比BTC网络&#xff0c;ETH网络的账户系统就相对复杂&#xff0c;所…

FPGA之带有进位逻辑的加法运算

module ADDER&#xff08; input [5&#xff1a;0]A&#xff0c; input [5&#xff1a;0]B&#xff0c;output[6&#xff1a;0]Q &#xff09;&#xff1b; assign Q AB&#xff1b; endmodule 综合结果如下图所示&#xff1a; 使用了6个Lut&#xff0c;&#xff0c;6个LUT分布…

【通信基础知识】完整通信系统的流程图及各模块功能详解

2024.2.29 抱歉最近在写毕设大论文&#xff0c;因此没有太多时间更新。然而&#xff0c;在写论文的过程中&#xff0c;发现自己对通信系统的了解还不够全明白&#xff0c;因此差了一些硕博论文总结了一个完整的通信系统流程图。若有不对的地方请多多指正//部分内容有参考ChatGP…