739. 每日温度

请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值