每日温度 --JAVA记录

根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。

提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的都是 [30, 100] 范围内的整数。

第一种直接对本次温度后面的温度进行遍历,直至找到温度大于当前温度。

public static int[] dailyTemperatures(int [] T) {
		
		int [] dailyT = new int [T.length];
		 
		for(int i =0 ; i < T.length - 1; i++) {
			int temp = 0;
			for(int j = i+1; j <T.length ;j++) {
				 if(T[i] < T[j]) {
					 temp = j - i;
					 break;
				 }
			}
			dailyT[i] = temp;
		}
		dailyT[T.length-1] = 0;
			
		return dailyT;
				
	}

第二种利用栈,只走一遍温度数组。 栈用来记录温度下标,当温度高于栈顶下标对应温度时出栈,天数为 当前温度下标-栈顶下标

	public static int[] dailyTemperatures(int [] T) {
		
		int [] dailyT = new int [T.length];
		Arrays.fill(dailyT, 0);
		Stack <Integer> stack = new Stack <Integer> (); //栈来记录 温度的下标。
		for(int i =0 ; i < T.length ; i++) {
			 
			while(!stack.isEmpty() && T[stack.peek()] < T[i]) {
				int t = stack.pop();
				dailyT[t] = i - t ; // i为大于当前出栈的温度下标,减去当前下标即为天数。
			}
			stack.push(i); //在stack为空和栈顶温度大于T[i]时候,将下标进栈。
		 
		}
 
			
		return dailyT;
				
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值