題目連結(jié):
題目意譯:
現(xiàn)在有一個(gè)整數(shù)陣列 nums,其是由 n 個(gè)相異元素所組成。不過你忘了這些元素怎麼排列了。好險(xiǎn)的是,你倒是記得 nums 中每一對(duì)的相鄰數(shù)字。
你被給定一個(gè)大小為 n - 1 的二維整數(shù)陣列 adjacentPairs,其中每一個(gè) adjacentPairs[i] = [ui, vi] 代表著元素 ui 和 vi 在 nums 中是相鄰的。
保證 nums 中每一對(duì)相鄰元素 nums[i] 和 nums[i + 1] 都會(huì)存在於 adjacentPairs 中,可能會(huì)作為 [nums[i], nums[i + 1]] 或是 [nums[i + 1], nums[i]] 出現(xiàn)。而這些數(shù)對(duì)可以按任意順序出現(xiàn)。
回傳原本的陣列 nums。如果有多個(gè)答案,則回傳任意一個(gè)。
限制:
nums.length == n
adjacentPairs.length == n - 1
adjacentPairs[i].length == 2
2 ≦ n ≦ 10 ^ 5
-10 ^ 5 ≦ nums[i], ui, vi ≦ 10 ^ 5
必定存在某些 nums 使得其所有的相鄰數(shù)對(duì)都包含於 adjacentPairs 中。
範(fàn)例測(cè)資:
範(fàn)例 1:
輸入: adjacentPairs = [[2,1],[3,4],[3,2]]
輸出: [1,2,3,4]
解釋: 這個(gè)陣列中所有的相鄰數(shù)對(duì)都包含於 adjacentPairs 中。
注意到 adjacentPairs[i] 不一定是由左至右看的數(shù)對(duì)之順序。
範(fàn)例 2:
輸入: adjacentPairs = [[4,-2],[1,4],[-3,1]]
輸出: [-2,4,1,-3]
解釋: 負(fù)數(shù)是有可能會(huì)出現(xiàn)的。
另一個(gè)答案是 [-3,1,4,-2],而這也可以作為正解被接受。
範(fàn)例 3:
輸入: adjacentPairs = [[100000,-100000]]
輸出: [100000,-100000]
解題思維:
由於 nums 中每一對(duì)相鄰數(shù)對(duì)都會(huì)出現(xiàn)在其中,再加上 nums 中的數(shù)字彼此相異,因此 nums 的開頭與結(jié)尾的數(shù)字只會(huì)各在 adjacentPairs 中出現(xiàn)恰好一次。
因此我們可以找出恰好出現(xiàn)一次的那兩個(gè)數(shù)字作為端點(diǎn)(可以用一個(gè)雜湊表(Hash Table)來儲(chǔ)存數(shù)字之間的相鄰關(guān)係,有點(diǎn)像是鄰接表(Adjacency List)那個(gè)樣子。參見
這題的說明),然後剩下就依序填入與端點(diǎn)相鄰的數(shù)字,再填入與「與端點(diǎn)相鄰的數(shù)字」相鄰的數(shù)字……以此類推。最後便可以將 nums 重建回去。
此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。