• 【力扣每日一题】2023.10.8 股票价格波动


    目录

    题目:

    示例:

    分析:

    代码:


    题目:

    示例:

    分析:

    这道题是程序设计题,要我们实现一个类,一共是四个功能,第一个是给一个时间戳和价格,表示该时间的股票价格,我们需要记录下这个时间以及对应的价格,如果之前已经记录过这个时间戳了,那么我们需要更新。

    第二个功能是获取最新的股票价格,也就是时间戳最大时的价格。

    剩下的是获取股票的最大和最小的价格。

    首先我们要获取股票的最大和最小价格,那么意味着我们需要对价格排序,我们要获取时间戳最大的数据,那么我们要对时间戳排序。既然都要排序,那么我们就无法在一个容器中同时实现,可以自动排序的容器有set和map,我们应该如何选择呢?

    对时间戳排序的容器我们使用map,因为时间戳一对一一个股票价格,刚好符合map的键值对,我们直接取出map最后一个元素的值就是最新的股票价格了。

    对股票价格排序的容器我们使用set,这样我们需要最大价格和最小价格时只需要出去set的最后一个元素和第一个元素即可。另外要注意的是,我们不能使用set,我们需要使用multiset,因为不同时间的股票价格是可能会重复的,而multiset可以多次存放相同的元素。

    三个获取的函数我们就搞定了,接下来是更新数据的函数。

    如果这个时间戳我们之前没有记录,那么我们正常存入map和set即可。如果这个时间我们之前记录了,由于我们要修改股票的价格,那么我们需要先把set中对应时间戳的股票价格给删除掉,再插入新的价格即可。

    代码:

    1. class StockPrice {
    2. public:
    3. map<int,int>m; //存放时间与价格的对应关系
    4. multiset<int>s; //存放记录中股票的价格
    5. StockPrice() {
    6. }
    7. void update(int timestamp, int price) {
    8. //如果对应时间已经有了,那么需要更新股票价格,把记录中的原价格删除
    9. if(m.find(timestamp)!=m.end()){
    10. s.erase(s.find(m[timestamp]));
    11. }
    12. //更新对应时间的股票价格以及存放记录中股票的价格
    13. m[timestamp]=price;
    14. s.insert(price);
    15. }
    16. int current() {
    17. //map底层自动排序,直接返回map中最后一个元素的second
    18. return (*(m.rbegin())).second;
    19. }
    20. int maximum() {
    21. //set底层自动排序,直接返回set中最后一个元素
    22. return (*(s.rbegin()));
    23. }
    24. int minimum() {
    25. //set底层自动排序,直接返回set中第一个元素
    26. return (*(s.begin()));
    27. }
    28. };

  • 相关阅读:
    HDLbits exercises 5 (BASIC GATES节选题)
    2021最新中高级Java面试题目,Java面试题汇总
    Spring事务失效的几种原因
    打开cmd的方式和常用Dos命令
    Matlab统计棋盘连通分量(空值区域)的大小和个数
    Prometheus服务发现之kubernetes_sd_config
    zkLogin构建者的最佳实践和业务思考
    Matplotlib绘图基础详细教程
    一文了解io.ReadAtLeast函数
    设计模式(二十五)----行为型模式之访问者模式
  • 原文地址:https://blog.csdn.net/m0_63235356/article/details/133687198