当前位置:首页 > 编程笔记 > 正文
已解决

股票价格跨度

来自网友在路上 166866提问 提问时间:2023-10-22 18:48:40阅读次数: 66

最佳答案 问答题库668位专家为你答疑解惑

问题:

设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。

当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。

  • 例如,如果未来 7 天股票的价格是 [100,80,60,70,60,75,85],那么股票跨度将是 [1,1,1,2,1,4,6] 。

实现 StockSpanner 类:

  • StockSpanner() 初始化类对象。
  • int next(int price) 给出今天的股价 price ,返回该股票当日价格的 跨度 。

示例: 

输入:
["StockSpanner", "next", "next", "next", "next", "next", "next", "next"]
[[], [100], [80], [60], [70], [60], [75], [85]]
输出:
[null, 1, 1, 1, 2, 1, 4, 6]解释:
StockSpanner stockSpanner = new StockSpanner();
stockSpanner.next(100); // 返回 1
stockSpanner.next(80);  // 返回 1
stockSpanner.next(60);  // 返回 1
stockSpanner.next(70);  // 返回 2
stockSpanner.next(60);  // 返回 1
stockSpanner.next(75);  // 返回 4 ,因为截至今天的最后 4 个股价 (包括今天的股价 75) 都小于或等于今天的股价。
stockSpanner.next(85);  // 返回 6

思想:

 单调栈,每当调用next函数时将当日价格的股票和往日的比较,大于等于当日的股票推出栈。

代码:

class StockSpanner {Stack<int[]> st;int index;public StockSpanner() {st = new Stack<>();index = -1;st.push(new int[]{index,Integer.MAX_VALUE});}public int next(int price) {index++;int ret = 1;while(price >= st.peek()[1]){st.pop();}ret = index - st.peek()[0];st.push(new int[]{index,price});return ret; }
}/*** Your StockSpanner object will be instantiated and called as such:* StockSpanner obj = new StockSpanner();* int param_1 = obj.next(price);*/

 

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"股票价格跨度":http://eshow365.cn/6-21850-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!