LC 901. 股票价格跨度 LC 739. 每日温度

1、LC 901. 股票价格跨度

编写一个 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) 小于或等于今天的价格。

提示:

  1. 调用 StockSpanner.next(int price) 时,将有 1 <= price <= 10^5。
  2. 每个测试用例最多可以调用 10000 次 StockSpanner.next。
  3. 在所有测试用例中,最多调用 150000 次 StockSpanner.next。
  4. 此问题的总时间限制减少了 50%。
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;
    } 
}

2、LC 739. 每日温度

根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 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;
    }

你可能感兴趣的:(数据结构,算法)