LeetCode 2097. Valid Arrangement of Pairs

原题链接在这里:https://leetcode.com/problems/valid-arrangement-of-pairs/description/

题目:

You are given a 0-indexed 2D integer array pairs where pairs[i] = [starti, endi]. An arrangement of pairs is valid if for every index i where 1 <= i < pairs.length, we have endi-1 == starti.

Return any valid arrangement of pairs.

Note: The inputs will be generated such that there exists a valid arrangement of pairs.

Example 1:

Input: pairs = [[5,1],[4,5],[11,9],[9,4]]
Output: [[11,9],[9,4],[4,5],[5,1]]
Explanation:
This is a valid arrangement since endi-1 always equals starti.
end0 = 9 == 9 = start1 
end1 = 4 == 4 = start2
end2 = 5 == 5 = start3

Example 2:

Input: pairs = [[1,3],[3,2],[2,1]]
Output: [[1,3],[3,2],[2,1]]
Explanation:
This is a valid arrangement since endi-1 always equals starti.
end0 = 3 == 3 = start1
end1 = 2 == 2 = start2
The arrangements [[2,1],[1,3],[3,2]] and [[3,2],[2,1],[1,3]] are also valid.

Example 3:

Input: pairs = [[1,2],[1,3],[2,1]]
Output: [[1,2],[2,1],[1,3]]
Explanation:
This is a valid arrangement since endi-1 always equals starti.
end0 = 2 == 2 = start1
end1 = 1 == 1 = start2

Constraints:

  • 1 <= pairs.length <= 105
  • pairs[i].length == 2
  • 0 <= starti, endi <= 109
  • starti != endi
  • No two pairs are exactly the same.
  • There exists a valid arrangement of pairs.

题解:

For each pair, can view it as an edge in graph. We would like to traverse all the edges once and find the path. That is Eulerian Path.

Eulerian path exist when all the outDegree = inDegree for all the nodes or two nodes exceptions the head and tail.

Since here we are guaranteed that there is a eulerian path, we skip checking the existance.

To tranverse, we recursively DFS from the start node, but when hitting the last node, there could be cases that there are edges that are not traversed yet, thus we need to backtracking to that state and traverse the rest.

After traversing all the nodes, add the last edge to the result.

Time Complexity: O(v + e). e = pairs.length. n is the number of nodes in graph.

Space: O(v + e).

AC Java:

 1 class Solution {
 2     public int[][] validArrangement(int[][] pairs) {
 3         HashMap<Integer, Stack<Integer>> graph = new HashMap<>();
 4         HashMap<Integer, Integer> out = new HashMap<>();
 5         for(int[] p : pairs){
 6             int u = p[0];
 7             int v = p[1];
 8             graph.computeIfAbsent(u, x -> new Stack<>()).push(v);
 9             out.put(u, out.getOrDefault(u, 0) + 1);
10             out.put(v, out.getOrDefault(v, 0) - 1);
11         }
12 
13         int start = -1;
14         for(Map.Entry<Integer, Integer> e : out.entrySet()){
15             if(e.getValue() == 1){
16                 start = e.getKey();
17                 break;
18             }
19         }
20 
21         if(start == -1){
22             start = pairs[0][0];
23         }
24 
25         LinkedList<int[]> res = new LinkedList<>();
26         eular(graph, start, res);
27         return res.toArray(new int[res.size()][2]);
28     }
29 
30     private void eular(HashMap<Integer, Stack<Integer>> graph, int start, LinkedList<int[]> res){
31         Stack<Integer> nexts = graph.getOrDefault(start, null);
32         while(nexts != null && !nexts.isEmpty()){
33             int next = nexts.pop();
34             eular(graph, next, res);
35             res.addFirst(new int[]{start, next});
36         }
37     } 
38 }

 

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

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

相关文章

TypeScript中,如何利用数组生成一个联合类型

本文由 ChatMoney团队出品 在开发中我们常常会遇到这样一个问题,代码如下: const arr = ["a","b","c","d","e","f","g","h","i","j","k","l",&qu…

图神经网络版本的Kolmogorov Arnold(KAN)代码实现和效果对比

Kolmogorov Arnold Networks (KAN)最近作为MLP的替代而流行起来,KANs使用Kolmogorov-Arnold表示定理的属性,该定理允许神经网络的激活函数在边缘上执行,这使得激活函数“可学习”并改进它们。 目前我们看到有很多使用KAN替代MLP的实验,但是目前来说对于图神经网络来说还没有…

修改yum安装的php的启动用户

在使用yum安装php时,默认情况下,安装完成后php的启动用户是apache 1、编辑php-fpm的配置文件。在大多数Linux系统中,php-fpm的配置文件路径为/etc/php-fpm.d/www.conf。 2、找到配置文件中的`user`和`group`项。默认情况下,`user`的值是apache,`group`的值是apache,即php…

Vue预渲染prerender-spa-plugin+vue-meta-info

前言: 公司现有一个新需求需要在原有的vue2项目上面进行预渲染,进行SEO的优化,在网上进行了一系列的搜索,发现两种简单易上手的方案(1.使用prerender-spa-plugin+vue-meta-info进行打包构建;2.使用nuxt.js在开发过程中就渲染呈现出来) 因是在原有项目基础上进行,所以采…

禅道的使用:如何搭建Ubuntu环境安装禅道

一、禅道安装部署的环境要求 1.禅道安装部署环境推荐使用 Linux + Apache + PHP7.0以上版本+ MySQL5.5以上版本/MariaDB的组合。Nginx其次,不推荐IIS + PHP组合。 2.禅道需要使用PHP的这些扩展:pdo、pdo_mysql、json、filte、openssl、mbstring、zlib、curl、gd、iconv,企业…

vue3.4+最新属性变化

Attribute绑定 新增简写方法 <!-- 与 :id="id" 相同 --> <div :id></div><!-- 这也同样有效 --> <div v-bind:id></div>动态参数 <a v-bind:[demoName]="url"></a>//简写 <a :[demoName]="url&qu…

【Modelsim常见问题】Error: (vsim-3170) Could not find

这个错误发生的原因通常是测试的tb文件模块名和文件名不一致导致,参考如下:

易基因:番茄果实采后处理成熟诱导的DNA甲基化和转录组综合分析 | 作物研究

番茄果实成熟是一个复杂的生理过程,涉及关键基因的去甲基化,改变其转录水平,从而触发一系列生理事件。然而果实采摘后的处理方法,如冷藏、化学处理等,虽然能延长番茄的货架寿命,但通常可能会降低果实品质,目前尚不清楚这些过程是如何改变的。因此,研究采后处理诱导的番…

BPI-M4 Berry USB测试

连接USB鼠标或键盘测试 1、将USB接口的键盘和鼠标插入开发板的USB接口中 2、开发板连接HDMI显示器,并通电启动 3、如果鼠标或键盘能正常操作系统说明USB接口使用正常(鼠标只有在桌面版的系统中才能使用) 连接USB存储设备测试 1、首先将U盘或者USB移动硬盘插入开发板的USB接口…

mac M1 安装miniconda3

进入国内大学镜像库下载安装包https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda 下载包打开终端,开始安装 1、执行命令: bash Miniconda3-latest-MacOSX-arm64.sh 2、输入回车后,阅读文件,输入:q 退出文件 3、输入yes开始安装 4、输入回车选择安装路径- 默认路径…

BPI-M4 Berry 蓝牙调试

通过命令行连接蓝牙 1、首先,确定设备是否有蓝牙设备。输入hciconfig 如果镜像没有则使用下面命令进行安装sudo apt install bluez 2、可以看到有一个hci0的蓝牙设备,接下来就开始连接其他蓝牙设备sudo bluetoothctlpower on #打开蓝牙网卡 devices #列出蓝牙网卡已经配…

win10 php_imagick 扩展的安装

http://www.hzhcontrols.com/new-1729990.html本篇文章介绍的内容是关于win10_php_imagick 扩展的安装,现在分享给大家,有需要的朋友可以参考一下 PHP_imagick 这个扩展是我迄今为止遇到最难安装的扩展主要问题在于正确的文档太少, 今天终于是把这个扩展安装好了. 下面分享一…

BPI-M4 Berry以太网口和WiFi测试

以太网口测试 1、首先将网线的一端插入M4Berry的以太网接口,另一端接入路由器,并确保网络是畅通的。 2、系统启动后会通过DHCP自动给以太网卡分配IP地址。可以输入以下命令查看ip:ifconfig或者ip a 可以看到eth0获取到了10.1.1.207的ip地址 接下来,ping一下百度测试网络是否…

BPI-M4 Berry创建热点和设置静态IP

create_ap是一个帮助快速创建Linux上的WIFI热点的脚本,并且支持bridge和NAT模式,能够自动结合hostapd, dnsmasq和iptables完成WIFI热点的设置,避免了用户进行复杂的配置,github地址如下: https://github.com/oblique/create_ap 使用NET模式创建AP 1、首先使用 ls /sys/cla…

BPI-M4 Berry 远程连接开发板

使用SSH远程 1、需要使用到软件mobaxterm,请前往官网(https://mobaxterm.mobatek.net/download.html?spm=wolai.workspace.0.0.768c378fz9RNFi)进行下载 2、将开发板启动,并使用网线连接路由器,或者与你的电脑连接。 打开mobaxterm。点击左上角的"session"图标…

BPI-M4 Berry自动登陆及关闭桌面

3-1 BPI-M4 Berry自动登陆及关闭桌面此方法仅适用BPI-M4Berry的ubuntu和debian系统系统默认登录账号,密码当开发板启动完成,输入账号密码即可登录。由Banana Pi提供的镜像,默认账号/密码分别是root/bananapi和pi/bananapi。(输入密码时是不可见的,输入时注意别输入大写字母…

PART1-Oracle关系数据结构

2. Oracle关系数据结构 2.1. 表和表簇 2.1.1. 模式对象简介 数据库模式是数据结构的逻辑容器,这些数据结构称为模式对象。模式对象的例子有表和索引。模式对象是通过 SQL 创建和操作的。 一个数据库用户拥有密码和各种数据库权限。每个用户拥有一个与其同名的模式。模式包含了…

ros - slam - 电机控制之速度控制实验

前面说到通过控制对应的IO上的PWM占空比即可完成对电机速度的控制。关于PWM的介绍在ROS2硬件控制篇的舵机控制中已经介绍过了,所以我们知道通过改变PWM的占空比可以实现对输出电压的大小调节。占空比越大,输出电压越高;占空比越小,输出电压越低。接着我们通过一个实验来验证…

BPI-M4 Berry在windows系统下连接串口调试

串口线 我手头的串口线是这样的,包含如下四个针脚:VCC、GND、TX、RX。串口针脚说明: 其他的串口线可能不止四根线,而且杜邦线的颜色也不一定和我的一样。 请看清楚接口标注,按照下面介绍,将其接到板子上对应的接口板子串口GNDGNDTXDRXDRXDTXD VCC是电源,可以不用接。有的…