5895. 获取单值网格的最小操作数

5895. 获取单值网格的最小操作数

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

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

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

更新 股票在某一时间戳的股票价格,如果有之前同一时间戳的价格,这一操作将 更正 之前的错误价格。
找到当前记录里 最新股票价格 。最新股票价格 定义为时间戳最晚的股票价格。
找到当前记录里股票的 最高价格 。
找到当前记录里股票的 最低价格 。
请你实现 StockPrice 类:

  • StockPrice() 初始化对象,当前无股票价格记录。
  • void update(int timestamp, int price) 在时间点 timestamp 更新股票价格为 price 。
  • int current() 返回股票 最新价格 。
  • int maximum() 返回股票 最高价格 。
  • int minimum() 返回股票 最低价格 。
示例 1:输入:
["StockPrice", "update", "update", "current", "maximum", "update", "maximum", "update", "minimum"]
[[], [1, 10], [2, 5], [], [], [1, 3], [], [4, 2], []]
输出:
[null, null, null, 5, 10, null, 5, null, 2]解释:
StockPrice stockPrice = new StockPrice();
stockPrice.update(1, 10); // 时间戳为 [1] ,对应的股票价格为 [10] 。
stockPrice.update(2, 5);  // 时间戳为 [1,2] ,对应的股票价格为 [10,5] 。
stockPrice.current();     // 返回 5 ,最新时间戳为 2 ,对应价格为 5 。
stockPrice.maximum();     // 返回 10 ,最高价格的时间戳为 1 ,价格为 10 。
stockPrice.update(1, 3);  // 之前时间戳为 1 的价格错误,价格更新为 3 。// 时间戳为 [1,2] ,对应股票价格为 [3,5] 。
stockPrice.maximum();     // 返回 5 ,更正后最高价格为 5 。
stockPrice.update(4, 2);  // 时间戳为 [1,2,4] ,对应价格为 [3,5,2] 。
stockPrice.minimum();     // 返回 2 ,最低价格时间戳为 4 ,价格为 2 。

image.png

解题思路

  • void update(int timestamp, int price) 在时间点 timestamp 更新股票价格为 price 。
  • int current() 返回股票 最新价格 。
  • int maximum() 返回股票 最高价格 。
  • int minimum() 返回股票 最低价格 。
    我们的目标是实现上述4个方法。
  1. int current() 返回股票 最新价格。我们只需要维护两个变量,最大的时间戳以及对应的价格即可
  2. 而对于其他方法,我们需要读取的是股票的最低以及最高价格,但是update方法会更正某些时间戳的价格,因此股票的最高和最低价格是动态更新的。使用一个treemap,维护价格和时间戳的对应关系,对于某个价格,该股票可能有多个对应的时间戳,利用treemap的特性我们可以在o(1)的时间复杂度内获取当前最大和最小价格。我们可以使用map维护每个时间戳对应的价格。
  3. 而update方法就需要维护上面的两个map。通过map,我们可以得到需要更新的时间戳原价是多少,再通过这个价格,定位到treemap里面,删除该时间戳。然后再将该时间戳和价格的对应关系插入到map和treemap里面

代码

    class StockPrice {//timeStamp ->priceMap<Integer, Integer> map = new HashMap<>();//price -> timeStampsTreeMap<Integer, Set<Integer>> up = new TreeMap<>();int curTime=-1,curPrice=-1;public StockPrice() {}public void update(int timestamp, int price) {if (timestamp>=curTime){curTime=timestamp;curPrice=price;}if(map.containsKey(timestamp)){Integer old = map.get(timestamp);up.get(old).remove(timestamp);if (up.get(old).isEmpty())up.remove(old);}map.put(timestamp, price);if (!up.containsKey(price))up.put(price,new HashSet<>());up.get(price).add(timestamp);}public int current() {return curPrice;}public int maximum() {return up.lastKey();}public int minimum() {return up.firstKey();}}/*** Your StockPrice object will be instantiated and called as such:* StockPrice obj = new StockPrice();* obj.update(timestamp,price);* int param_2 = obj.current();* int param_3 = obj.maximum();* int param_4 = obj.minimum();*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/389991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么要用Redis

最近阅读了《Redis开发与运维》&#xff0c;非常不错。这里对书中的知识整理一下&#xff0c;方便自己回顾一下Redis的整个体系&#xff0c;来对相关知识点查漏补缺。我按照五点把书中的内容进行一下整理&#xff1a;为什么要选择Redis&#xff1a;介绍Redis的使用场景与使用Re…

区块链开发公司谈区块链在商业上的应用

对于近期正受科技界和资本市场关注的区块链行业&#xff0c;一句话概括说如果互联网技术解决的是通讯问题的话&#xff0c;区块链技术解决的是信任问题&#xff0c;其在商业领域应用如何呢&#xff1f;我们来从两个方面去进行剖析。 第一方面&#xff0c;区块链技术可以解决基础…

ORACLE1.21 PLSQL 01

-- 有了SQL 为什么还需要PL/SQL -- SQL功能很强大&#xff0c;但如果是单1sql语句&#xff0c;没有流程控制 -- PL/SQL 是什么&#xff1f; --不仅仅实现流程控制&#xff0c;同时保留SQL本身所有的功能 --还提供变量、常量等支持 --提供更多数据类型的支持 --第一&#xff0c;…

云原生数据库_数据标签竞赛云原生地理空间冲刺

云原生数据库STAC specification is getting closer to the ver 1.0 milestone, and as such the first virtual Cloud Native Geospatial Sprint is being organized next week. An outreach day is planned on Sep 8th with a series of talks and tutorials for everyone. R…

Linux 下的 hosts文件

2019独角兽企业重金招聘Python工程师标准>>> hosts 文件 目录在 /etc/hosts netstat -ntlp //linux 下查看端口 转载于:https://my.oschina.net/u/2494575/blog/1923074

DjangoORM字段介绍

转载于:https://www.cnblogs.com/cansun/p/8647371.html

黑客独角兽_双独角兽

黑客独角兽Preface前言 Last week my friend and colleague Srivastan Srivsan’s note on LinkedIn about Mathematics and Data Science opened an excellent discussion. Well, it is not something new; there were debates in the tech domain such as vim v.s emacs to …

38. 外观数列

38. 外观数列 给定一个正整数 n &#xff0c;输出外观数列的第 n 项。 「外观数列」是一个整数序列&#xff0c;从数字 1 开始&#xff0c;序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列&#xff1a; countAndSay(1) “1”countAnd…

Lab1

1.导入 JUnit&#xff0c;Hamcrest Project -> Properites -> Java Build Path -> Add External JARs 2. 安装 Eclemma Help -> Eclipse marketplace 搜索 Eclemma&#xff0c;点击Installed 3. 测试代码 TrianglePractice&#xff1a; public class TrianglePract…

551. Student Attendance Record I 从字符串判断学生考勤

&#xff3b;抄题&#xff3d;&#xff1a; You are given a string representing an attendance record for a student. The record only contains the following three characters: A : Absent. L : Late.P : Present. A student could be rewarded if his attendance record…

使用deploy命令上传jar到私有仓库

打开cmd命令提示符&#xff0c;mvn install是将jar包安装到本地库&#xff0c;mvn deploy是将jar包上传到远程server&#xff0c;install和deploy都会先自行bulid编译检查&#xff0c;如果确认jar包没有问题&#xff0c;可以使用-Dmaven.test.skiptrue参数跳过编译和测试。 全命…

Mac上使用Jenv管理多个JDK版本

使用Java时会接触到不同的版本。大多数时候我在使用Java 8&#xff0c;但是因为某些框架或是工具的要求&#xff0c;这时不得不让Java 7上前线。一般情况下是配置JAVA_HOME&#xff0c;指定不同的Java版本&#xff0c;但是这需要人为手动的输入。如果又要选择其他版本&#xff…

交互式和非交互式_发布交互式剧情

交互式和非交互式Python中的Visual EDA (Visual EDA in Python) I like to learn about different tools and technologies that are available to accomplish a task. When I decided to explore data regarding COVID-19 (Coronavirus), I knew that I would want the abilit…

电子表格转换成数据库_创建数据库,将电子表格转换为关系数据库,第1部分...

电子表格转换成数据库Part 1: Creating an Entity Relational Diagram (ERD)第1部分&#xff1a;创建实体关系图(ERD) A Relational Database Management System (RDMS) is a program that allows us to create, update, and manage a relational database. Structured Query …

【Vue.js学习】生命周期及数据绑定

一、生命后期 官网的图片说明&#xff1a; Vue的生命周期总结 var app new Vue({el:"#app", beforeCreate: function(){console.log(1-beforeCreate 初始化之前);//加载loading},created: function(){console.log(2-created 创建完成);//关闭loading},be…

Springboot(2.0.0.RELEASE)+spark(2.1.0)框架整合到jar包成功发布(原创)!!!

一、前言 首先说明一下&#xff0c;这个框架的整合可能对大神来说十分容易&#xff0c;但是对我来说十分不易&#xff0c;踩了不少坑。虽然整合的时间不长&#xff0c;但是值得来纪念下&#xff01;&#xff01;&#xff01;我个人开发工具比较喜欢IDEA&#xff0c;创建的sprin…

求一个张量的梯度_张量流中离散策略梯度的最小工作示例2 0

求一个张量的梯度Training discrete actor networks with TensorFlow 2.0 is easy once you know how to do it, but also rather different from implementations in TensorFlow 1.0. As the 2.0 version was only released in September 2019, most examples that circulate …

zabbix网络发现主机

1 功能介绍 默认情况下&#xff0c;当我在主机上安装agent&#xff0c;然后要在server上手动添加主机并连接到模板&#xff0c;加入一个主机组。 如果有很多主机&#xff0c;并且经常变动&#xff0c;手动操作就很麻烦。 网络发现就是主机上安装了agent&#xff0c;然后server自…

python股市_如何使用python和破折号创建仪表板来主导股市

python股市始终关注大局 (Keep Your Eyes on the Big Picture) I’ve been fascinated with the stock market since I was a little kid. There is certainly no shortage of data to analyze, and if you find an edge you can make some easy money. To stay on top of the …

阿里巴巴开源 Sentinel,进一步完善 Dubbo 生态

为什么80%的码农都做不了架构师&#xff1f;>>> 阿里巴巴开源 Sentinel&#xff0c;进一步完善 Dubbo 生态 Sentinel 开源地址&#xff1a;https://github.com/alibaba/Sentinel 转载于:https://my.oschina.net/dyyweb/blog/1925839