• 作者:老汪软件技巧
  • 发表时间:2023-12-26 23:00
  • 浏览量:

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

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

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

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

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

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

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

请你实现 类:

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

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

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

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

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

思路:本题主要使用了。大部分用法与类似。

是 Java 中的一个基于红黑树(Red-Black Tree)实现的有序映射(Map)数据结构。它扩展了 类,并实现了 和 接口,因此具有有序性和排序功能。以下是关于 的详细介绍:

特点和用途:

基本操作示例:

下面是使用 的一些基本操作示例:

import java.util.*;
public class TreeMapExample {
    public static void main(String[] args) {
        // 创建一个 TreeMap
        TreeMap treeMap = new TreeMap<>();
        // 插入键值对
        treeMap.put("apple", 3);
        treeMap.put("banana", 2);
        treeMap.put("cherry", 5);
        treeMap.put("date", 1);
        // 遍历 TreeMap
        for (Map.Entry entry : treeMap.entrySet()) {
            String key = entry.getKey();
            int value = entry.getValue();
            System.out.println("Key: " + key + ", Value: " + value);
        }
        // 查找键对应的值
        int value = treeMap.get("banana"); // 返回 2
        // 删除键值对
        treeMap.remove("cherry");
    }
}

注意事项:

的键必须是可比较的,要么具有自然顺序,要么提供了比较器。

在使用自定义对象作为键时,需要确保自定义对象实现了 接口或在构造 时提供了比较器。

不是线程安全的,如果需要在多线程环境中使用,应该考虑使用 p。

总之, 是一个有序的、高效的键值对数据结构,适用于需要按键排序的场景。它提供了丰富的操作方法,允许进行导航、范围查询和高效查找。

class StockPrice {
    /**
    思路:
    使用一个HashMap与一个TreeMap
    HashMap存储时间戳与价格
    TreeMap存储价格与是该价格的天数
     */
    HashMap hashMap = new HashMap();
    TreeMap treeMap = new TreeMap();
    int curDay = -1;
    public StockPrice() {
    }
    
    public void update(int timestamp, int price) {
        if(curDay