Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java stack.pop()返回什么?_Java_Algorithm_Data Structures_Stack - Fatal编程技术网

Java stack.pop()返回什么?

Java stack.pop()返回什么?,java,algorithm,data-structures,stack,Java,Algorithm,Data Structures,Stack,我正在尝试以下问题: 给出每日温度列表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[] dailyTem

我正在尝试以下问题:

给出每日温度列表
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);

    }
}
公共类每日温度{
公共内部[]每日温度(内部[]温度){
int[]res=新的int[温度.长度];
堆栈=新堆栈();
对于(int i=0;itemperatures[stack.peek()]){
int index=stack.pop();//这一行是我的查询
res[index]=i-指数;
}
堆栈推送(i);
}
for(int i:res){
系统输出打印项次(“+i”);
}
返回res;
}
公共静态void main(字符串[]args){
每日温度每日温度=新的每日温度();
int[]temp={73,74,75,71,69,72,76,73};
每日温度。每日温度(temp);
}
}

我在代码中添加了一条注释

是的,正如Willem所提到的,从堆栈中删除顶层元素并返回其值。那么你是如何获得索引的呢?您需要注意删除的元素代表什么。在本例中,它表示温度数组中的索引:

stack.push(i);

请注意,它会将i推入温度[i]的内部,因此实际上是在堆栈中存储索引而不是值。代码基本上会将所有索引推入堆栈,当当前温度高于堆栈顶部的温度时,将其移除并标记该索引的答案,即
i-index
(当前日期-温度较低的较早日期).

位于堆栈顶部的元素:它也会从堆栈中删除该元素。请看这里,算法已经构建了一个索引堆栈。您将索引放入堆栈,您将从堆栈中获取索引。。。索引只是一个整数,堆栈可以保存整数Thank@juvian..我遗漏了插入数组索引的部分,而不是元素本身…谢谢大家的解释