日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/11/29 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1743. 从相邻元素对还原数组 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

存在一個由 n 個不同元素組成的整數(shù)數(shù)組 nums ,但你已經(jīng)記不清具體內(nèi)容。好在你還記得 nums 中的每一對相鄰元素。

給你一個二維整數(shù)數(shù)組 adjacentPairs ,大小為 n - 1 ,其中每個 adjacentPairs[i] = [ui, vi] 表示元素 ui 和 vi 在 nums 中相鄰。

題目數(shù)據(jù)保證所有由元素 nums[i] 和 nums[i+1] 組成的相鄰元素對都存在于 adjacentPairs 中,存在形式可能是 [nums[i], nums[i+1]] ,也可能是 [nums[i+1], nums[i]] 。這些相鄰元素對可以 按任意順序 出現(xiàn)。

返回 原始數(shù)組 nums 。如果存在多種解答,返回 其中任意一個 即可。

  • 示例 1:

輸入:adjacentPairs = [[2,1],[3,4],[3,2]]
輸出:[1,2,3,4]
解釋:數(shù)組的所有相鄰元素對都在 adjacentPairs 中。
特別要注意的是,adjacentPairs[i] 只表示兩個元素相鄰,并不保證其 左-右 順序。

  • 示例 2:

輸入:adjacentPairs = [[4,-2],[1,4],[-3,1]]
輸出:[-2,4,1,-3]
解釋:數(shù)組中可能存在負(fù)數(shù)。
另一種解答是 [-3,1,4,-2] ,也會被視作正確答案。

  • 示例 3:

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

解題思路

  • 使用圖表示鄰接關(guān)系,數(shù)組的每個元素當(dāng)成是一個節(jié)點,除了首尾元素以外,每個節(jié)點在數(shù)組中應(yīng)該前后相鄰兩個節(jié)點,根據(jù)記錄數(shù)組中相鄰元素的adjacentPairs,構(gòu)建出圖
  • 遍歷每個節(jié)點的鄰接點的個數(shù),個數(shù)為1的數(shù)組的首尾元素
  • 對圖進行深度優(yōu)先搜索,以數(shù)組的首尾元素為起點,遍歷圖的路徑就是數(shù)組的順序
  • 代碼

    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);}} }

    總結(jié)

    以上是生活随笔為你收集整理的1743. 从相邻元素对还原数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。