Open yankewei opened 3 years ago
对于贪心算法,我一直是不理解的, 感觉贪心没有什么固定的模版,不像并查集或者说hash一样
func restoreArray(adjacentPairs [][]int) []int {
var ret []int
// 把每个元素的相邻元素组成一个hashMap, key为元素,value 为元素的相邻元素
m := map[int][]int{}
for _, v := range adjacentPairs {
m[v[0]] = append(m[v[0]], v[1])
m[v[1]] = append(m[v[1]], v[0])
}
// 找到第一个元素,或者最后一个元素
key := adjacentPairs[0][0]
for k, v := range m {
// 因为第一个元素或者最后一个元素,它的相邻元素肯定是一个
if len(v) == 1 {
key = k
}
}
// 声明一个hashMap,存储已经遍历过的元素,因为Go没有 Set 这种数据结构,需要自己实现,空的 struct 不会占用额外的空间
exists := map[int]struct{}{}
for len(m) > 0 {
ret = append(ret, key)
exists[key] = struct{}{}
between := m[key]
delete(m, key)
for _, v:= range between {
if _, e := exists[v]; !e {
key = v
}
}
}
return ret
}
存在一个由
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:
示例 2:
示例 3:
提示:
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/restore-the-array-from-adjacent-pairs 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。