日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/11/29 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5895. 获取单值网格的最小操作数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

5895. 獲取單值網(wǎng)格的最小操作數(shù)

給你一支股票價格的數(shù)據(jù)流。數(shù)據(jù)流中每一條記錄包含一個 時間戳?和該時間點股票對應(yīng)的 價格?。

不巧的是,由于股票市場內(nèi)在的波動性,股票價格記錄可能不是按時間順序到來的。某些情況下,有的記錄可能是錯的。如果兩個有相同時間戳的記錄出現(xiàn)在數(shù)據(jù)流中,前一條記錄視為錯誤記錄,后出現(xiàn)的記錄 更正?前一條錯誤的記錄。

請你設(shè)計一個算法,實現(xiàn):

更新 股票在某一時間戳的股票價格,如果有之前同一時間戳的價格,這一操作將?更正?之前的錯誤價格。
找到當前記錄里 最新股票價格?。最新股票價格?定義為時間戳最晚的股票價格。
找到當前記錄里股票的 最高價格?。
找到當前記錄里股票的 最低價格?。
請你實現(xiàn)?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] ,對應(yīng)的股票價格為 [10] 。 stockPrice.update(2, 5); // 時間戳為 [1,2] ,對應(yīng)的股票價格為 [10,5] 。 stockPrice.current(); // 返回 5 ,最新時間戳為 2 ,對應(yīng)價格為 5 。 stockPrice.maximum(); // 返回 10 ,最高價格的時間戳為 1 ,價格為 10 。 stockPrice.update(1, 3); // 之前時間戳為 1 的價格錯誤,價格更新為 3 。// 時間戳為 [1,2] ,對應(yīng)股票價格為 [3,5] 。 stockPrice.maximum(); // 返回 5 ,更正后最高價格為 5 。 stockPrice.update(4, 2); // 時間戳為 [1,2,4] ,對應(yīng)價格為 [3,5,2] 。 stockPrice.minimum(); // 返回 2 ,最低價格時間戳為 4 ,價格為 2 。

解題思路

  • void update(int timestamp, int price)?在時間點 timestamp?更新股票價格為 price?。
  • int current()?返回股票 最新價格?。
  • int maximum()?返回股票 最高價格?。
  • int minimum()?返回股票 最低價格?。
    我們的目標是實現(xiàn)上述4個方法。
  • int current()?返回股票 最新價格。我們只需要維護兩個變量,最大的時間戳以及對應(yīng)的價格即可
  • 而對于其他方法,我們需要讀取的是股票的最低以及最高價格,但是update方法會更正某些時間戳的價格,因此股票的最高和最低價格是動態(tài)更新的。使用一個treemap,維護價格和時間戳的對應(yīng)關(guān)系,對于某個價格,該股票可能有多個對應(yīng)的時間戳,利用treemap的特性我們可以在o(1)的時間復(fù)雜度內(nèi)獲取當前最大和最小價格。我們可以使用map維護每個時間戳對應(yīng)的價格。
  • 而update方法就需要維護上面的兩個map。通過map,我們可以得到需要更新的時間戳原價是多少,再通過這個價格,定位到treemap里面,刪除該時間戳。然后再將該時間戳和價格的對應(yīng)關(guān)系插入到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();*/

    總結(jié)

    以上是生活随笔為你收集整理的5895. 获取单值网格的最小操作数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。