- 作者:老汪软件技巧
- 发表时间: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