开启我的LeetCode刷题日记:2034. 股票价格波动

204 阅读2分钟

「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战

编程世界总是离不了算法

最近在看框架源码时,会有很多算法的实现逻辑,有时候会感到吃力

于是决定蹭着假期,加强算法和数据结构相关的知识

那怎么提升呢?

其实我知道算法这东西没有捷径,多写多练才能提升,于是我开启我的LeetCode刷题之旅

第一阶段目标是:200道,每天12

为了不乱,本系列文章目录分为三部分:

  1. 今日题目:xxx
  2. 我的思路
  3. 代码实现

今天题目:1332. 删除回文子序列

难度:简单

给你一支股票价格的数据流。数据流中每一条记录包含一个 时间戳 和该时间点股票对应的 价格 。

不巧的是,由于股票市场内在的波动性,股票价格记录可能不是按时间顺序到来的。某些情况下,有的记录可能是错的。如果两个有相同时间戳的记录出现在数据流中,前一条记录视为错误记录,后出现的记录 更正 前一条错误的记录。

请你设计一个算法,实现:

  • 更新 股票在某一时间戳的股票价格,如果有之前同一时间戳的价格,这一操作将 更正 之前的错误价格。

  • 找到当前记录里 最新股票价格 。最新股票价格 定义为时间戳最晚的股票价格。

  • 找到当前记录里股票的 最高价格 。

  • 找到当前记录里股票的 最低价格 。 请你实现 StockPrice 类:

  • StockPrice() 初始化对象,当前无股票价格记录。

  • void update(int timestamp, int price) 在时间点 timestamp 更新股票价格为 price 。

  • int current() 返回股票 最新价格 。

  • int maximum() 返回股票 最高价格 。

  • int minimum() 返回股票 最低价格 。

我的思路

  • 使用Map保存时刻、价格
  • 使用两个变量保存当前的最新的时刻和价格
  • 在update中,若当前输入的时间大于等于存的时间,说明是新的时间,而不是纠错的时间,则更新当前的时间和价格
  • 返回当前价格、最大值、最小值即可

代码实现

class StockPrice {
  constructor() {
    this.time = 0;
    this.price = 0;
    this.timePrice = new Map();
  }
  update(timestamp, price) {
    this.timePrice.set(timestamp, price);
    if (this.time <= timestamp) {
      this.time = timestamp;
      this.price = price;
    }
  }
  current() {
    return this.price;
  }
  maximum() {
    let max = 0;
    for (const price of this.timePrice.values()) {
      if (max < price) max = price;
    }
    return max;
  }
  minimum() {
    let min = Infinity;
    for (const price of this.timePrice.values()) {
      if (min > price) min = price;
    }
    return min;
  }
}

执行用时:6656 ms, 在所有 JavaScript 提交中击败了11.54%的用户

内存消耗:77.1 MB, 在所有 JavaScript 提交中击败了84.62%的用户

通过测试用例:18 / 18

总结

实现方式其实有很多,这里仅供参考~

由于刚开始刷题,也不知道从哪里刷好,如果前辈们有好的建议,希望不吝赐教,感谢🌹