编写一个 StockSpanner 类,它收集某些股票的每日报价,并返回该股票当日价格的跨度。
今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。
例如,如果未来7天股票的价格是 [100, 80, 60, 70, 60, 75, 85],那么股票跨度将是 [1, 1, 1, 2, 1, 4, 6]。
示例:
输入:[“StockSpanner”,“next”,“next”,“next”,“next”,“next”,“next”,“next”], [[],[100],[80],[60],[70],[60],[75],[85]]
输出:[null,1,1,1,2,1,4,6]
解释:
首先,初始化 S = StockSpanner(),然后:
S.next(100) 被调用并返回 1,
S.next(80) 被调用并返回 1,
S.next(60) 被调用并返回 1,
S.next(70) 被调用并返回 2,
S.next(60) 被调用并返回 1,
S.next(75) 被调用并返回 4,
S.next(85) 被调用并返回 6。
注意 (例如) S.next(75) 返回 4,因为截至今天的最后 4 个价格
(包括今天的价格 75) 小于或等于今天的价格。
提示:
import java.util.*;
class StockSpanner {
public StockSpanner() {
}
Stack stack=new Stack<>();
public int next(int price) {
int res=1;
while (!stack.isEmpty()&&stack.peek()[0]<=price){
res+=stack.pop()[1];
}
stack.push(new int[]{price,res});
return res;
}
public int[] getRes(int[] arr){
int[] dp=new int[arr.length];
return dp;
}
}
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的都是 [30, 100] 范围内的整数。
思路1:
//739. 每日温度
public int[] dailyTemperatures1(int[] T) {
int[] t=T;
int[] res=new int[T.length];
for(int i=0;i
思路2:
//思路2:别人的
public int[] dailyTemperatures(int[] T) {
int[] t=T;
int[] res=new int[t.length];
Stack stack=new Stack<>();
for(int i=0;it[stack.peek()]){
int index=stack.pop();
res[index]=i-index;
}
stack.push(i);
}
return res;
}