1743. 从相邻元素对还原数组

存在一个由 n 个不同元素组成的整数数组 nums ,但你已经记不清具体内容。好在你还记得 nums 中的每一对相邻元素。

给你一个二维整数数组 adjacentPairs ,大小为 n - 1 ,其中每个 adjacentPairs[i] = [ui, vi] 表示元素 ui 和 vi 在 nums 中相邻。

题目数据保证所有由元素 nums[i] 和 nums[i+1] 组成的相邻元素对都存在于 adjacentPairs 中,存在形式可能是 [nums[i], nums[i+1]] ,也可能是 [nums[i+1], nums[i]] 。这些相邻元素对可以 按任意顺序 出现。

返回 原始数组 nums 。如果存在多种解答,返回 其中任意一个 即可。

  • 示例 1:

输入:adjacentPairs = [[2,1],[3,4],[3,2]]
输出:[1,2,3,4]
解释:数组的所有相邻元素对都在 adjacentPairs 中。
特别要注意的是,adjacentPairs[i] 只表示两个元素相邻,并不保证其 左-右 顺序。

  • 示例 2:

输入:adjacentPairs = [[4,-2],[1,4],[-3,1]]
输出:[-2,4,1,-3]
解释:数组中可能存在负数。
另一种解答是 [-3,1,4,-2] ,也会被视作正确答案。

  • 示例 3:

输入:adjacentPairs = [[100000,-100000]]
输出:[100000,-100000]

解题思路

  1. 使用图表示邻接关系,数组的每个元素当成是一个节点,除了首尾元素以外,每个节点在数组中应该前后相邻两个节点,根据记录数组中相邻元素的adjacentPairs,构建出图
  2. 遍历每个节点的邻接点的个数,个数为1的数组的首尾元素
  3. 对图进行深度优先搜索,以数组的首尾元素为起点,遍历图的路径就是数组的顺序

代码

class Solution {public int[] restoreArray(int[][] adjacentPairs) {int n=adjacentPairs.length+1;Map<Integer,List<Integer>> map=new HashMap<>();for (int[] pair : adjacentPairs) {map.putIfAbsent(pair[0],new ArrayList<>());map.get(pair[0]).add(pair[1]);map.putIfAbsent(pair[1],new ArrayList<>());map.get(pair[1]).add(pair[0]);}int s=-1;for (Map.Entry<Integer, List<Integer>> entry : map.entrySet()) {if(entry.getValue().size()==1){s=entry.getKey();break;}}ArrayList<Integer> list = new ArrayList<>();dfsRestoreArray(n,list,-1,s,map);int[] res = new int[n];for (int i=0;i<n;i++)res[i]=list.get(i);return res;}public void dfsRestoreArray(int n,List<Integer> list,int pre,int cur, Map<Integer,List<Integer>> map) {list.add(cur);for (Integer next : map.get(cur)) {if (next==pre)continue;dfsRestoreArray(n,list,cur,next,map);}}
}

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

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

相关文章

十 web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令

Scrapy框架安装 1、首先&#xff0c;终端执行命令升级pip: python -m pip install --upgrade pip2、安装&#xff0c;wheel(建议网络安装) pip install wheel3、安装&#xff0c;lxml(建议下载安装)4、安装&#xff0c;Twisted(建议下载安装)5、安装&#xff0c;Scrapy(建议网络…

阿里与珠海横琴新区达成战略合作,阿里云助力打造横琴智能岛

5月17日&#xff0c;阿里巴巴集团、蚂蚁金服集团与珠海横琴新区管理委员会签署战略合作协议&#xff0c;三方将围绕云计算、政务民生服务、城市治理、电子商务等领域展开深入合作&#xff0c;推动横琴产业发展&#xff0c;共同建设新型智慧城市。 &#xff08;阿里巴巴集团、蚂…

chrome 开发工具_我最喜欢的Chrome开发工具提示和技巧

chrome 开发工具Chrome Developer Tools are a super powerful suite of tools for developing web applications. They can do so much, from very basic operations like traversing the DOM, to checking out network requests or even profiling your applications perform…

三十四 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解

信号一般使用信号分发器dispatcher.connect()&#xff0c;来设置信号&#xff0c;和信号触发函数&#xff0c;当捕获到信号时执行一个函数 dispatcher.connect()信号分发器&#xff0c;第一个参数信号触发函数&#xff0c;第二个参数是触发信号&#xff0c; 以下是各种信号 sig…

1713. 得到子序列的最少操作次数

给你一个数组 target &#xff0c;包含若干 互不相同 的整数&#xff0c;以及另一个整数数组 arr &#xff0c;arr 可能 包含重复元素。 每一次操作中&#xff0c;你可以在 arr 的任意位置插入任一整数。比方说&#xff0c;如果 arr [1,4,1,2] &#xff0c;那么你可以在中间添…

CVE-2018-1000136:Electron nodeIntegration绕过漏洞

1周前&#xff0c;研究人员发现一个影响Electron所有版本的漏洞&#xff0c;利用该漏洞可以开启nodeIntegration&#xff0c;这可能会造成远程代码执行。Electron是一个使用JavaScript,HTML和CSS等Web技术创建原生程序的框架&#xff0c;它负责比较难搞的部分&#xff0c;而用户…

bash脚本 文件_如何使用Bash脚本来管理从AWS S3存储桶下载和查看文件

bash脚本 文件As you can read in this article, I recently had some trouble with my email server and decided to outsource email administration to Amazons Simple Email Service (SES). 正如您在本文中所读到的 &#xff0c;最近我的电子邮件服务器遇到了一些麻烦&…

rsync(六)命令中文手册

rsync(1) rsync(1)名称rsync - 一个快速、多功能的远程(和本地)文件拷贝工具摘要Local: rsync [OPTION...] SRC... [DEST]Access via remote shell:Pull: rsync [OPTION...] [USE…

NFS共享存储服务部署

服务端部署 1、检查服务器上是否已安装nfs及rpc&#xff0c;没有则需要安装检查rpm -qa rpcbind nfs-utils安装&#xff08;已安装略过&#xff09;yum install -y rpcbind nfs-utils################################################################2、编写nfs的配置文件cat…

区块链运作机制_什么是区块链及其运作方式?

区块链运作机制If youre interested in technology, theres a good chance you’ve probably heard the terms Bitcoin, Crypto, Ethereum, or even "distributed, decentralized ledgers."如果您对技术感兴趣&#xff0c;那么您很有可能已经听说过比特币&#xff0c…

敏捷管理之绩效考核方案

前段时间&#xff0c;公司签了年终奖确认。觉得公司发放年终奖完全是凭主观发放&#xff0c;没有事实依据&#xff0c;由此产生了对如何发放年终奖的一些想法。 奖金发放作为激励员工最直接的手段&#xff0c;往往也是让管理人员最难抉择的&#xff0c;而且很多公司&#xff0c…

序言

为什么要写这篇文章&#xff1f; 说起架构&#xff0c;刚入行的新人觉得是高大上的技术&#xff0c;有工作经验的一些人又觉得是虚无缥缈的东西&#xff0c;不能落实。具体有用没用&#xff0c;我不给答案&#xff0c;想通过写这么一个例子来还原场景&#xff0c;让读者自己判断…

kotlin编程语言_Kotlin初学者编程基础

kotlin编程语言什么是Kotlin&#xff1f; (What is Kotlin?) Kotlin is a programming language developed by Jetbrains, the company behind some of the world’s most popular IDEs like IntelliJ and Pycharm.Kotlin是Jetbrains开发的一种编程语言&#xff0c;该公司是In…

记一个蒟蒻的绝望

感觉现在…… 怎么讲&#xff0c;心挺冷的。 今天一月五号了。距离省选&#xff0c;时间好短啊。 我还有那么多东西不懂。甚至听都没听说过。 等到真正去省选的时候&#xff0c;我可能跟现在一样&#xff0c;什么都不会。 我的名字能不能被看到都不知道。哈&#xff0c;还进队呢…

671. 二叉树中第二小的节点

给定一个非空特殊的二叉树&#xff0c;每个节点都是正数&#xff0c;并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话&#xff0c;那么该节点的值等于两个子节点中较小的一个。 更正式地说&#xff0c;root.val min(root.left.val, root.right.val) 总…

CentOS查询端口占用和清除端口占用的程序

1、查询端口号占用&#xff0c;根据端口查看进程信息 [rootserver2 ~]# lsof -i:80COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEhttpd 5014 root 3u IPv4 14346 TCP server2:http (LISTEN)2、根据进程号查看进程对应的可执行程序 ps -f -p 进程号# p…

Android基础夯实--你了解Handler有多少?

概述 对于刚入门的同学来说&#xff0c;往往都会对Handler比较迷茫&#xff0c;到底Handler是个什么样的东西。当然&#xff0c;可能对于一些有工作经验的工程师来说&#xff0c;他们也不一定能很准确地描述&#xff0c;我们来看下API的介绍。 Handler是用来结合线程的消息队列…

spring与springBoot不同之处

( 1&#xff09;遵循“习惯优于配置”的原则&#xff0c;使用Spring Boot只需要很少的配置&#xff0c;大部分的时候我们直接使用默认的配置即可&#xff1b; &#xff08;2&#xff09;项目快速搭建&#xff0c;可以无需配置的自动整合第三方的框架&#xff1b; &#xff08;3…

sketch-a-net_Adobe XD,Sketch,Figma,InVision-如何在2020年选择最佳设计软件

sketch-a-netComparing Adobe XD vs Sketch vs Figma vs InVision studio is a very common topic among designers who are looking for the best design software. 在寻求最佳设计软件的设计师中&#xff0c;比较Adobe XD&#xff0c;Sketch&#xff0c;Figma和InVision Stud…

merge intervals(合并间隔)

Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,10],[15,18],return [1,6],[8,10],[15,18]. 题目没有说所有间隔的start是依次增加的。所以&#xff0c;为了方便讨论&#xff0c;我们要将所有间隔按照start升序排列。因…