Leetcode 1743 - Restore the Array From Adjacent Pairs

題目

Problem#

有一個整數陣列 nums 裏頭有 $n$ 個 unique 的元素。題目給你一個 adjacentPairs[i] = [ui, vi] 陣列有 $n-1$ 個元素,代表 uivinums 相鄰。保證所有 nums 相鄰的數字一定出現在 adjacentPairs 中,可能以任意順序出現。
回傳原始的 nums 陣列,如果有多種解,回傳任意一種。

測資限制#

  • nums 長度: $2 \le n \le 10^5$
  • adjacentPairs 長度: $== n-1$
  • $-10^5 \le \text{nums[i]}, u_i, v_i \le 10^5$

想法#

觀察: 開頭與結束的數字都只有一個數字與它相鄰,其他都有兩個數字 -> 找起點。可以用 map 統計每個數字的相鄰情況 $O(n\log{n})$,接著就從起點開始去 dfs,還原出 nums 陣列。
dfs 一路往前,不能往回走,過程紀錄當前、前個數字,當下個數字與前個數字相同時,且多次當前數字沒有更新,代表結束。

AC Code#

  • 時間複雜度: $\mathcal{O}(n\log{n})$
  • 空間複雜度: $\mathcal{O}(n)$

心得#

注意數值邊界(尤其負的),還有 dfs 的 break (不 break 的話 range for 會不預期)