LeetCode 496. 下一个更大元素 I
题目描述
思路分析
单调栈 + 哈希表
我们可以使用栈和哈希表来解决这个问题。具体思路如下:
- 初始化一个栈和一个哈希表
nextGreater
,用于存储每个元素的下一个更大元素。- 遍历
nums2
,对于每个元素:
- 如果栈不为空且当前元素大于栈顶元素,则更新
nextGreater
中栈顶元素对应的值为当前元素,并弹出栈顶元素。- 将当前元素压入栈。
- 遍历
nums1
,根据nextGreater
哈希表中的值构建结果数组res
。- 最终返回
res
数组。
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
func nextGreaterElement(nums1 []int, nums2 []int) []int {
res := make([]int, len(nums1))
nextGreater := make(map[int]int)
var stack []int
for _, num := range nums2 {
for len(stack) > 0 && num > stack[len(stack)-1] {
nextGreater[stack[len(stack)-1]] = num
stack = stack[:len(stack)-1]
}
stack = append(stack, num)
}
for i, num := range nums1 {
if val, ok := nextGreater[num]; ok {
res[i] = val
} else {
res[i] = -1
}
}
return res
}
1
write your code here
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用