package com.daily.daily20210202;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
/**
* @Project: dailyCode
* @Site: http://www.zhao1iang.club/
* @Copyright: ©CodeLamp
* @Author: zhaoliang
* @Create: 2021-02-02 14:24
* @Desc: 每日温度
**/
public class dailyTemperatures {
//请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用0 来代替。
//
//例如,给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是[1, 1, 4, 2, 1, 1, 0, 0]。
//
//提示:气温 列表长度的范围是[1, 30000]。每个气温的值的均为华氏度,都是在[30, 100]范围内的整数。
public int[] dailyTemperatures(int[] temperatures){
int[] res = new int[temperatures.length];
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0; i <temperatures.length ; i++) {
int cnt =0;
int cur = temperatures[i];
map.put(i,0);
for (int j = i+1; j <temperatures.length ; j++) {
int curj = temperatures[j];
cnt++;
if (curj > cur){
map.put(i,map.getOrDefault(i,0)+cnt);
break;
}
}
}
map.forEach((key,value)->{
res[key] = value;
});
return res;
}
public int[] dailyTemperatures2(int[] temperatures){
int n = temperatures.length;
int[] res = new int[n];
Stack<Integer> stack = new Stack<>();
for (int i = 0; i <n ; i++) {
while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]){
int index = stack.pop();
res[index] = i - index;
}
stack.push(i);
}
return res;
}
}
日常刷题-每日温度
最新推荐文章于 2024-07-21 22:27:18 发布