「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」
编程世界总是离不了算法
最近在看框架源码时,会有很多算法的实现逻辑,有时候会感到吃力
于是决定蹭着假期,加强算法和数据结构相关的知识
那怎么提升呢?
其实我知道算法这东西没有捷径,多写多练才能提升,于是我开启我的LeetCode刷题之旅
第一阶段目标是:200道,每天1到2篇
为了不乱,本系列文章目录分为三部分:
- 今日题目:xxx
- 我的思路
- 代码实现
今天题目: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
总结
实现方式其实有很多,这里仅供参考~
由于刚开始刷题,也不知道从哪里刷好,如果前辈们有好的建议,希望不吝赐教,感谢🌹