func dailyTemperatures(temperatures []int) []int {
n := len(temperatures)
stack := make([]int, n)
result := make([]int, n)
top := 0
for i := 1; i < n; i++ {
//获取栈顶值
top = stack[len(stack)-1]
//小于等于直接入栈
if temperatures[i] <= temperatures[i-1] {
stack = append(stack, i)
} else {
for len(stack) != 0 && temperatures[i] > temperatures[top] {
//计算当前下标与栈顶值之差就是要的结果
result[top] = i - top
stack = stack[:len(stack)-1]
if len(stack) != 0 {
top = stack[len(stack)-1]
}
}
stack = append(stack, i)
}
}
return result
}
func nextGreaterElement(nums1 []int, nums2 []int) []int {
n := len(nums1)
h := len(nums2)
stack := make([]int, h)
result := make([]int, n)
m1 := make(map[int]int)
top := 0
for i := 0; i < n; i++ {
result[i] = -1
//nums1值和下标做映射
m1[nums1[i]] = i
}
for i := 1; i < h; i++ {
top = stack[len(stack)-1]
if nums2[i] <= nums2[top] {
stack = append(stack, i)
} else {
for len(stack) != 0 && nums2[i] > nums2[top] {
//如果nums2[top]值是map的key找到了要的结果
if k, ok := m1[nums2[top]]; ok {
result[k] = nums2[i]
}
stack = stack[:len(stack)-1]
if len(stack) != 0 {
top = stack[len(stack)-1]
}
}
stack = append(stack, i)
}
}
return result
}