Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • 数组

  • 链表

  • 字符串

  • 二叉树

  • 动态规划

  • 深搜回溯

  • 数学贪心

  • 堆栈队列

    • 394.字符串解码
    • 32. 最长有效括号
    • 739. 每日温度
    • 1130. 叶值的最小代价生成树
    • 84. 柱状图中最大的矩形
    • 42.接雨水
    • 85. 最大矩形
    • 239.滑动窗口最大值
    • 6891. 机器人碰撞
    • 445. 两数相加 II
    • 2762. 不间断子数组
    • 6919. 使数组中的所有元素都等于零
    • 862. 和至少为 K 的最短子数组
    • 1499. 满足不等式的最大值
    • 2856. 删除数对后的最小数组长度
    • 901. 股票价格跨度
      • 1.跳表遍历
      • 2.单调栈
    • 2034. 股票价格波动
    • 1488. 避免洪水泛滥
    • 2940. 找到 Alice 和 Bob 可以相遇的建筑
    • 2454. 下一个更大元素 IV
  • 前缀和

  • 算法设计

  • 位运算

  • WA

  • 算法
  • 堆栈队列
phan
2023-10-07
目录

901. 股票价格跨度

# 901. 股票价格跨度 (opens new window)

# 1.跳表遍历

模拟跳表,对于插入的元素price[i],如果该元素大于上一个元素price[i-1],那么计算今日价格跨度时,可以直接利用前一日价格跨度。

每一个元素最多被访问一次,时间复杂度O(n)。(当前元素的结果如果被纳入到后一天的股票跨度中,那么当前元素在后续遍历时就永远不会再次被访问)

class StockSpanner {
    List<int[]> list;
    public StockSpanner() {
        list=new ArrayList<>();
    }
    public int next(int price) {
        int level=find(price,list.size()-1);
        list.add(new int[]{price,level});
        return level;
    }
    public int find(int price,int inx){
        if(inx<0) return 1;
        int currPrice=list.get(inx)[0];
        int currInx=list.get(inx)[1];
        if(currPrice<=price){
            int newInx=inx-currInx;
            return currInx+find(price,newInx); 
        }
        return 1;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 2.单调栈

单调栈真言:及时去掉无用元素,保证元素有序。

本质上和第一种实现方法没有太大区别。

class StockSpanner {
    Stack<int []> stack;
    public StockSpanner() {
        stack=new Stack<>();
    }
    public int next(int price) {
        int level=1;
        while(!stack.isEmpty()){
            int[] peek=stack.peek();
            int currPrice=peek[0];
            int currLevel=peek[1];
            if(price>=currPrice){
                stack.pop();
                level+=currLevel;
            }
            else break;
        }
        stack.push(new int[]{price,level});
        return level;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
编辑 (opens new window)
#Leetcode#堆栈队列
上次更新: 2023/12/15, 15:49:57
2856. 删除数对后的最小数组长度
2034. 股票价格波动

← 2856. 删除数对后的最小数组长度 2034. 股票价格波动→

Theme by Vdoing | Copyright © 2023-2024 blageCoder
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式