重视 Treemap 理解问题
putting value in Treemap understanding issues
我 运行 解决了一个 leetcode 问题。并在讨论区找到解决方案
问题- https://leetcode.com/problems/stock-price-fluctuation/
解决方案-
class StockPrice {
HashMap<Integer, Integer> hm; //timestamp,price
TreeMap<Integer, Integer> tm; //price, frequency
int current;
public StockPrice() {
hm = new HashMap<>();
tm = new TreeMap<>();
current = 0;
}
public void update(int timestamp, int price) {
//check whether latest timestamp or current timestamp is larger...
current = Math.max(current, timestamp); //if timesatamp already present
if(hm.containsKey(timestamp))
{
int oldprice=hm.get(timestamp);
if(tm.get(oldprice)==1){
tm.remove(oldprice); //
}
else{
tm.put(oldprice, tm.get(oldprice)-1);
}
}
//update new price in hm
hm.put(timestamp, price);
//update new frequency of new price in treemap
tm.put (price, tm.getOrDefault(price,0)+1);
}
public int current() {
return hm.get(current);
}
public int maximum() {
return tm.lastKey();
}
public int minimum() {
return tm.firstKey();
}
}
但我不明白以下部分。
如果有人能解释那就太好了
-
tm.put(oldprice, tm.get(oldprice)-1);
-
tm.put (price, tm.getOrDefault(price,0)+1);
要解决此问题,您需要知道股票以特定价格交易的频率。
一个例子:
- 它在时间戳 1 交易 10,在时间戳 2 交易 5。现在最高价格是 10。(有一笔交易 10,一笔交易 5)
- 时间戳 1 的价格更新为 3。现在最高价格为 5。(有一笔交易 3,一笔交易 5)
另一个例子:
- 时间戳1成交10,时间戳2成交5,时间戳3成交10。最高价也是10。(10成交两笔,5成交一笔)
- 时间戳 1 的价格更新为 3。现在最高价格仍然是 10(因为时间戳 3 的交易)。 (有一笔交易 10 笔,一笔交易 3 笔,一笔交易 5 笔)
有
tm.put (price, tm.getOrDefault(price,0)+1);
注意到以特定价格发生了一笔交易。
更新旧交易时,
if (tm.get(oldprice)==1) {
tm.remove(oldprice); //
} else {
tm.put(oldprice, tm.get(oldprice)-1);
}
要么删除旧价格的条目(如果该价格只有一笔交易),要么注意到该价格少了一笔交易。
我 运行 解决了一个 leetcode 问题。并在讨论区找到解决方案
问题- https://leetcode.com/problems/stock-price-fluctuation/
解决方案-
class StockPrice {
HashMap<Integer, Integer> hm; //timestamp,price
TreeMap<Integer, Integer> tm; //price, frequency
int current;
public StockPrice() {
hm = new HashMap<>();
tm = new TreeMap<>();
current = 0;
}
public void update(int timestamp, int price) {
//check whether latest timestamp or current timestamp is larger...
current = Math.max(current, timestamp); //if timesatamp already present
if(hm.containsKey(timestamp))
{
int oldprice=hm.get(timestamp);
if(tm.get(oldprice)==1){
tm.remove(oldprice); //
}
else{
tm.put(oldprice, tm.get(oldprice)-1);
}
}
//update new price in hm
hm.put(timestamp, price);
//update new frequency of new price in treemap
tm.put (price, tm.getOrDefault(price,0)+1);
}
public int current() {
return hm.get(current);
}
public int maximum() {
return tm.lastKey();
}
public int minimum() {
return tm.firstKey();
}
}
-
tm.put(oldprice, tm.get(oldprice)-1);
-
tm.put (price, tm.getOrDefault(price,0)+1);
要解决此问题,您需要知道股票以特定价格交易的频率。
一个例子:
- 它在时间戳 1 交易 10,在时间戳 2 交易 5。现在最高价格是 10。(有一笔交易 10,一笔交易 5)
- 时间戳 1 的价格更新为 3。现在最高价格为 5。(有一笔交易 3,一笔交易 5)
另一个例子:
- 时间戳1成交10,时间戳2成交5,时间戳3成交10。最高价也是10。(10成交两笔,5成交一笔)
- 时间戳 1 的价格更新为 3。现在最高价格仍然是 10(因为时间戳 3 的交易)。 (有一笔交易 10 笔,一笔交易 3 笔,一笔交易 5 笔)
有
tm.put (price, tm.getOrDefault(price,0)+1);
注意到以特定价格发生了一笔交易。
更新旧交易时,
if (tm.get(oldprice)==1) {
tm.remove(oldprice); //
} else {
tm.put(oldprice, tm.get(oldprice)-1);
}
要么删除旧价格的条目(如果该价格只有一笔交易),要么注意到该价格少了一笔交易。