请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。
解题思路:
1、暴力解法
依次遍历找到第一个大于的数字,解法忽略
2、栈的思想
暴力解法会有多次重复的比较,如果对栈有较为深刻的理解,应该会想到用栈来存储,如果想到用栈来存储索引,就更棒了。反思我一开始是没想到栈,因为我的理解还很肤浅,哈哈,要加油。
import java.util.Arrays;
import java.util.Stack;
public class TestQiTemp {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] t = {73,74,75,71,69,72,76,73};
TestQiTemp sort = new TestQiTemp();
t = sort.trans(t);
System.out.println("-->"+Arrays.toString(t));
}
private int[] trans(int t[]) {
int[] result = new int[t.length];
int k = 0;
Stack<Integer> stack = new Stack<Integer>();
stack.push(0);
for(int i=1;i<t.length;i++) {
int j = stack.peek();
// System.out.println("i-->"+i+",j="+j);
if(t[i] > t[j]) {
result[j]=i-j;
while(!stack.isEmpty()) {
k = (int) stack.pop();
// System.out.println("i-->"+i+",k="+k);
if(t[i] > t[k]) {
result[k]=i-k;
}else {
stack.push(k);
break;
}
}
stack.push(i);
}else {
stack.push(i);
}
// System.out.println("1-->"+Arrays.toString(result));
}
return result;
}
}
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/daily-temperatures
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。