Задача: Ежедневная температура
https://t.me/Golang_googleУсловие: дается массив, в котором содержатся на температуры за определенный день. Необходимо вернуть массив, такой что будет содержать на i-ой позиции количество дней, которое необходимо выждать, чтобы наступил день теплее. Если такой ситуации не случается, то на i-ой позиции установить 0.
Пример:
Ввод: temperatures = [73,74,75,71,69,72,76,73]
Вывод: [1,1,4,2,1,1,0,0]
Ввод: temperatures = [30,40,50,60]
Вывод: [1,1,1,0]
Решение:
Go
type pair struct {
temperature, idx int
}
type StackNode struct {
val pair
next *StackNode
}
type Stack struct {
top *StackNode
}
func (s *Stack) Top() *StackNode {
return s.top
}
func (s *Stack) Pop() *StackNode {
if s.top == nil {
return nil
}
returnVal := s.top
s.top = s.top.next
return returnVal
}
func (s *Stack) Push(p pair) {
newNode := &StackNode{val: p, next: s.top}
s.top = newNode
}
func dailyTemperatures(temperatures []int) []int {
res := make([]int, len(temperatures))
stack := &Stack{}
for i, t := range temperatures {
for top := stack.Top(); top != nil && top.val.temperature < t; top = stack.Top() {
stack.Pop()
res[top.val.idx] = i - top.val.idx
}
stack.Push(pair{temperature: t, idx: i})
}
return res
}