Что возвращает stack.pop ()? - PullRequest
0 голосов
/ 07 мая 2019

Я пытался решить следующую проблему:

Учитывая список дневных температур T, вернуть список такой, что для каждый день на входе говорит вам, сколько дней вам придется ждать до более теплой температуры. Если нет будущего дня, для которого это возможно, вместо этого поставьте 0.

Например, учитывая список температур T = [73, 74, 75, 71, 69, 72, 76, 73], вы должны получить [1, 1, 4, 2, 1, 1, 0, 0].

Я нашел это решение, которое работает отлично, но я не понимаю, как мы получаем индекс из метода stack.pop()? Разве он не возвращает значение элемента?

public class DailyTemperatures {
    public int[] dailyTemperatures(int[] temperatures) {
        int[] res = new int[temperatures.length];
        Stack<Integer> stack = new Stack();

        for (int i = 0; i < temperatures.length; i++) {
            while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) {

                int index = stack.pop();//this line is my query

                res[index] = i - index;
            }
            stack.push(i);
        }

        for (int i : res) {
            System.out.println(" "+ i);
        }
        return res;
    }

    public static void main(String[] args) {
        DailyTemperatures dailyTemperatures=new DailyTemperatures();
        int [] temp={73, 74, 75, 71, 69, 72, 76, 73};
        dailyTemperatures.dailyTemperatures(temp);

    }
}

Я добавил комментарий в коде

1 Ответ

2 голосов
/ 07 мая 2019

Да, как упомянул Виллем pop , удаляет верхний элемент из стека и возвращает его значение.Итак, как вы получаете индекс?Вы должны отметить, что представляет собой удаленный элемент.В этом случае он представляет индекс из массива температур:

stack.push(i);

Обратите внимание, что он выдвигает i intead температур [i], поэтому вы фактически сохраняете индексы вместо значений в стеке.Код в основном помещает все индексы в стек, и когда текущая температура превышает единицу на вершине стека, вы удаляете ее и отмечаете ответ для этого индекса, который равен i - index (текущий день - более старый день с более низкой температурой).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...