Задача: Ежедневная температура

Задача: Ежедневная температура

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
}




Report Page