LeetCode 2097. 合法重新排列数对(欧拉路径)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个下标从 0 开始的二维整数数组 pairs ,其中 pairs[i] = [starti, endi] 。如果 pairs 的一个重新排列,满足对每一个下标 i ( 1 <= i < pairs.length )都有 endi-1 == starti ,那么我们就认为这个重新排列是 pairs 的一个 合法重新排列 。

请你返回 任意一个 pairs 的合法重新排列。

注意:数据保证至少存在一个 pairs 的合法重新排列。

示例 1:
输入:pairs = [[5,1],[4,5],[11,9],[9,4]]
输出:[[11,9],[9,4],[4,5],[5,1]]
解释:
输出的是一个合法重新排列,因为每一个 endi-1 都等于 starti 。
end0 = 9 == 9 = start1 
end1 = 4 == 4 = start2
end2 = 5 == 5 = start3示例 2:
输入:pairs = [[1,3],[3,2],[2,1]]
输出:[[1,3],[3,2],[2,1]]
解释:
输出的是一个合法重新排列,因为每一个 endi-1 都等于 starti 。
end0 = 3 == 3 = start1
end1 = 2 == 2 = start2
重新排列后的数组 [[2,1],[1,3],[3,2]][[3,2],[2,1],[1,3]] 都是合法的。示例 3:
输入:pairs = [[1,2],[1,3],[2,1]]
输出:[[1,2],[2,1],[1,3]]
解释:
输出的是一个合法重新排列,因为每一个 endi-1 都等于 starti 。
end0 = 2 == 2 = start1
end1 = 1 == 1 = start2提示:
1 <= pairs.length <= 10^5
pairs[i].length == 2
0 <= starti, endi <= 10^9
starti != endi
pairs 中不存在一模一样的数对。
至少 存在 一个合法的 pairs 重新排列。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-arrangement-of-pairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 332. 重新安排行程(欧拉路径)

欧拉回路的充要条件
无向图:所有点的度数都为偶数
有向图:所有点的入度==出度


欧拉路径的充要条件
无向图:除两点(起点与终点)外其余点的度数都为偶数
有向图:除两点(起点 入度+1=出度,终点 入度−1=出度)外,其余点的 入度==出度

  • pair [A, B] 看做是点 A 到 B 的一条有向边
  • 记录出入度,建图
  • 然后从满足上面条件的点(起点 入度+1=出度)开始 dfs
class Solution {vector<int> path;
public:vector<vector<int>> validArrangement(vector<vector<int>>& pairs) {int n = pairs.size();unordered_map<int, multiset<int>> g; //图unordered_map<int, int> indegree, outdegree;for(int i = 0; i < n; ++i){int x = pairs[i][0], y = pairs[i][1];outdegree[x]++;indegree[y]++;g[x].insert(y);}int start = pairs[0][0];for(int i = 0; i < n; ++i){int x = pairs[i][0], y = pairs[i][1];int indegree_i = indegree.count(x) ? indegree[x] : 0;int outdegree_i = outdegree.count(x) ? outdegree[x] : 0;if(indegree_i + 1 == outdegree_i){start = x;break;}}dfs(start, g);vector<vector<int>> ans;for(int i = path.size()-1; i > 0; i--) // 逆序输出就是欧拉路径ans.push_back({path[i], path[i-1]});return ans;}void dfs(int idx, unordered_map<int, multiset<int>>& g){while(g[idx].size()){int nt = *g[idx].begin();g[idx].erase(g[idx].begin());dfs(nt, g);}path.push_back(idx);}
};

952 ms 302.7 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

linux防火墙 33001端口,Linux操作系统下IPTables配置方法详解

如果你的IPTABLES基础知识还不了解,建议先去看看。我们来配置一个filter表的防火墙1、查看本机关于IPTABLES的设置情况[roottp ~]# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destinationChain FORWARD (policy ACCEPT)target prot opt source destina…

《如何在大学里脱颖而出(How to Win at College)》读书笔记

《如何在大学里脱颖而出(How to Win at College)》读书笔记 图书简介 中文版&#xff1a; 英文版&#xff1a; 作者卡尔纽波特&#xff08;Cal Newport&#xff09;于 2004 年6月以优等生荣誉学会会员身份毕业于达特茅斯学院。曾在《华尔街日报》的学报和《今日商务》等杂志上发…

LeetCode 2099. 找到和最大的长度为 K 的子序列

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 和一个整数 k 。 你需要找到 nums 中长度为 k 的 子序列 &#xff0c;且这个子序列的 和最大 。 请你返回 任意 一个长度为 k 的整数子序列。 子序列 定义为从一个数组里删除一些元素后&#xff0c;不改变剩下元素的顺…

cms安装教程Linux,DoraCMS安装教程(linux)

最近在熟悉linux环境&#xff0c;也基本上把DoraCMS部署上去了&#xff0c;本教程基于ubuntu server 14.0.4&#xff0c;其它linux版本部署方式基本上差不多&#xff0c;下面详细说明一下&#xff1a;1、进入server环境下&#xff0c;在ubuntu目录下建立文件夹softbak,我们用来…

hdu 2049 考新郎

假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能. 和之前那道题一样&#xff0c;是错排&#xff0c;但是要乘上排列数。 选对的人有C(N,M)个组合&#xff0c;将它们排除掉&#xff0c;剩下的人就是错排了 1 #include<iostream>2 #include…

LeetCode 2100. 适合种地的日子(计数)

文章目录1. 题目2. 解题1. 题目 你和一群强盗准备种地。给你一个下标从 0 开始的整数数组 security &#xff0c;其中 security[i] 是第 i 天 天气热的数量。日子从 0 开始编号。同时给你一个整数 time 。 如果第 i 天满足以下所有条件&#xff0c;我们称它为一个适合种地的日…

如何在linux中使用u盘,如何在Linux系统下使用U盘

如何在Linux系统下使用U盘Linux系统中U盘被视为SCSI设备, SCSI设备对应的设备文件格式为“sdX” 系统中的第一个SCSI设备表示“sda”&#xff0c;第二个表示为“sdb”等。下面是jy135小编收集整理的U盘里面的.如何在Linux系统下使用U盘&#xff0c;欢迎阅读。在Linux系统下&…

H3C路由器真是不行

“华三”在我的印象中在通信设备这方面是挺牛逼的&#xff0c;后来虽然卖给了紫光&#xff0c;但我一直认为这是资本的博弈&#xff0c;与华三自己本身没有关系&#xff0c; 直到我买了一台华三的路由器&#xff08;型号是ER3108GW千兆路由器&#xff09;之后&#xff0c;办公室…

linux sys存放内容,了解linux系统目录,sys,tmp,usr,var!

原标题&#xff1a;了解linux系统目录&#xff0c;sys,tmp,usr,var&#xff01;linux小白到大神的成长之路&#xff1a;了解linux系统目录&#xff0c;sys,tmp,usr,var&#xff01;本经验由宗龙龙原创,全文共600多字&#xff0c;阅读需要14分钟&#xff0c;如果文中存在错误&am…

LeetCode 2101. 引爆最多的炸弹(图的遍历)

文章目录1. 题目2. 解题1. 题目 给你一个炸弹列表。一个炸弹的 爆炸范围 定义为以炸弹为圆心的一个圆。 炸弹用一个下标从 0 开始的二维整数数组 bombs 表示&#xff0c;其中 bombs[i] [xi, yi, ri] 。xi 和 yi 表示第 i 个炸弹的 X 和 Y 坐标&#xff0c;ri 表示爆炸范围的…

vim学习笔记(3)眼花缭乱的Vim模式

vim的模式问题&#xff0c;网上说的比较乱&#xff0c;我仔细的查了一下资料&#xff0c;并在这里做一个总结。 总的来说是六大种模式&#xff0c;分别是&#xff1a; 普通(Normal) 可视(Visual) 选择(Select) 插入(Insert) 命令行(Command-line) Ex模式。 还有六个小的组合模式…

linux脚本大全,shell大全

命令解析器——例如bash是一个程序&#xff0c;可以解析shell命令shell基本语法变量环境变量敲命令“env”可以取出所有环境变量环境变量可以当全局变量来使用set命令可以输出当前系统的全部环境变量以及函数unset命令用于删除一个环境变量本地变量自定义的变量——局限在某个脚…

LeetCode 2103. 环和杆(位运算)

文章目录1. 题目2. 解题1. 题目 总计有 n 个环&#xff0c;环的颜色可以是红、绿、蓝中的一种。 这些环分布穿在 10 根编号为 0 到 9 的杆上。 给你一个长度为 2n 的字符串 rings &#xff0c;表示这 n 个环在杆上的分布。 rings 中每两个字符形成一个 颜色位置对 &#xff0…

手脱ACProtect V1.4X(有Stolen Code)之补区段

首先需要说的是&#xff0c;这个壳是ximo大神视频教程里的 0041F000 > 60 pushad ; //程序入口点 0041F001 E8 01000000 call NgaMy.0041F007 0041F006 E8 83042406 call 0665F48E 0041F00B C3 …

小米平板2刷Linux教程,小米平板2刷机教程 官方线刷图文教程

小米平板2刷机教程 官方线刷机教程小米平板2官方线刷教程1、准备工作&#xff0c;下载刷机工具和刷机包下载小米官方刷机工具点击下载小米线刷工具>>>下载小米平板2刷机包&#xff0c;点击小米平板2刷机资源>>>2、在小米平板上的操作&#xff0c;关机状态下&…

LeetCode 2104. 子数组范围和(单调栈)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 。nums 中&#xff0c;子数组的 范围 是子数组中最大元素和最小元素的差值。 返回 nums 中 所有 子数组范围的 和 。 子数组是数组中一个连续 非空 的元素序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输…

C++的虚函数表

这里的例子全部来自陈皓的C 虚函数表解析&#xff0c;经过修改的。 编译器&#xff1a;g (Ubuntu 4.9.2-10ubuntu13) 4.9.2 环境&#xff1a;ubuntu 15.04 64位系统&#xff08;地址占8字节&#xff09; 例子1&#xff1a; 1 #define LL long long2 3 class Base {4 public:5 …

linux发指令给网络设备,Linux学习笔记五(网络命令)

1、 给用户发信息命令:write指令名称:write指令所在路径:/usr/bin/write执行权限:所有用户语法:write 功能描述:给用户发信息&#xff0c;以CtrlD保存结束范例: # write msg2、 发广播信息命令:wall指令名称:wall命令英文原意:write all指令所在路径:/usr/bin/wall执行权限:所有…

尽量使用写文本方式存储数据(pandas 和 file write效率对比)

对比&#xff1a;使用 pandas 存储数据 VS 使用写文本 方式存储数据 import pandas as pd import time def pandasWrite():t0 time.time()colname [str(i) for i in range(550)]df pd.DataFrame(columnscolname)for i in range(100):df.loc[len(df)] dict(zip(colname, ra…

Hadoop学习笔记—10.Shuffle过程那点事儿

Hadoop学习笔记—10.Shuffle过程那点事儿 一、回顾Reduce阶段三大步骤 在第四篇博文《初识MapReduce》中&#xff0c;我们认识了MapReduce的八大步骤&#xff0c;其中在Reduce阶段总共三个步骤&#xff0c;如下图所示&#xff1a; 其中&#xff0c;Step2.1就是一个Shuffle操作&…