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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode 1801. 积压订单中的订单总数(map)

發布時間:2024/7/5 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1801. 积压订单中的订单总数(map) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給你一個二維整數數組 orders ,其中每個 orders[i] = [pricei, amounti, orderTypei] 表示有 amounti 筆類型為 orderTypei 、價格為 pricei 的訂單。

訂單類型 orderTypei 可以分為兩種:

  • 0 表示這是一批采購訂單 buy
  • 1 表示這是一批銷售訂單 sell

注意,orders[i] 表示一批共計 amounti 筆的獨立訂單,這些訂單的價格和類型相同。
對于所有有效的 i ,由 orders[i] 表示的所有訂單提交時間均早于 orders[i+1] 表示的所有訂單。

存在由未執行訂單組成的 積壓訂單 。積壓訂單最初是空的。提交訂單時,會發生以下情況:

  • 如果該訂單是一筆采購訂單 buy ,則可以查看積壓訂單中價格 最低 的銷售訂單 sell 。如果該銷售訂單 sell 的價格 低于或等于 當前采購訂單 buy 的價格,則匹配并執行這兩筆訂單,并將銷售訂單 sell 從積壓訂單中刪除。否則,采購訂單 buy 將會添加到積壓訂單中。
  • 反之亦然,如果該訂單是一筆銷售訂單 sell ,則可以查看積壓訂單中價格 最高 的采購訂單 buy 。如果該采購訂單 buy 的價格 高于或等于 當前銷售訂單 sell 的價格,則匹配并執行這兩筆訂單,并將采購訂單 buy 從積壓訂單中刪除。否則,銷售訂單 sell 將會添加到積壓訂單中。

輸入所有訂單后,返回積壓訂單中的 訂單總數
由于數字可能很大,所以需要返回對 10^9 + 7 取余的結果。

示例 1:

輸入:orders = [[10,5,0],[15,2,1],[25,1,1],[30,4,0]] 輸出:6 解釋:輸入訂單后會發生下述情況: - 提交 5 筆采購訂單,價格為 10 。沒有銷售訂單,所以這 5 筆訂單添加到積壓訂單中。 - 提交 2 筆銷售訂單,價格為 15 。沒有采購訂單的價格大于或等于 15 ,所以這 2 筆訂單添加到積壓訂單中。 - 提交 1 筆銷售訂單,價格為 25 。沒有采購訂單的價格大于或等于 25 ,所以這 1 筆訂單添加到積壓訂單中。 - 提交 4 筆采購訂單,價格為 30 。前 2 筆采購訂單與價格最低(價格為 15)的 2 筆銷售訂單匹配,從積壓訂單中刪除這 2 筆銷售訂單。第 3 筆采購訂單與價格最低的 1 筆銷售訂單匹配,銷售訂單價格為 25 ,從積壓訂單中刪除這 1 筆銷售訂單。積壓訂單中不存在更多銷售訂單,所以第 4 筆采購訂單需要添加到積壓訂單中。 最終,積壓訂單中有 5 筆價格為 10 的采購訂單,和 1 筆價格為 30 的采購訂單。所以積壓訂單中的訂單總數為 6

示例 2:

輸入:orders = [[7,1000000000,1],[15,3,0],[5,999999995,0],[5,1,1]] 輸出:999999984 解釋:輸入訂單后會發生下述情況: - 提交 109 筆銷售訂單,價格為 7 。沒有采購訂單,所以這 109 筆訂單添加到積壓訂單中。 - 提交 3 筆采購訂單,價格為 15 。這些采購訂單與價格最低(價格為 7 )的 3 筆銷售訂單匹配,從積壓訂單中刪除這 3 筆銷售訂單。 - 提交 999999995 筆采購訂單,價格為 5 。銷售訂單的最低價為 7 ,所以這 999999995 筆訂單添加到積壓訂單中。 - 提交 1 筆銷售訂單,價格為 5 。這筆銷售訂單與價格最高(價格為 5 )的 1 筆采購訂單匹配,從積壓訂單中刪除這 1 筆采購訂單。 最終,積壓訂單中有 (1000000000-3) 筆價格為 7 的銷售訂單,和 (999999995-1) 筆價格為 5 的采購訂單。所以積壓訂單中的訂單總數為 1999999991 ,等于 999999984 % (10^9 + 7) 。提示: 1 <= orders.length <= 10^5 orders[i].length == 3 1 <= pricei, amounti <= 10^9 orderTypei 為 01

https://leetcode-cn.com/problems/number-of-orders-in-the-backlog/

2. 解題

  • 使用 map ,更新維護,數量為0的時候刪除
typedef pair<int,int> pii; struct cmp{bool operator()(int a, int b) const{return a > b;} }; class Solution { public:int getNumberOfBacklogOrders(vector<vector<int>>& orders) {map<int, long long> qsell;map<int,long long,cmp> qbuy;for(int i = 0; i < orders.size(); ++i){int num = orders[i][1];int price = orders[i][0];if(orders[i][2] == 0)//buy訂單{for(auto it=qsell.begin(); it != qsell.end() && num; ){if(price >= it->first){if(it->second > num){it->second -= num;num = 0;break;}else{num -= it->second;it->second = 0;qsell.erase(it++);}}elsebreak;}if(num){qbuy[price] += num;}}else{for(auto it=qbuy.begin(); it != qbuy.end() && num; ){if(price <= it->first){if(it->second > num){it->second -= num;num = 0;break;}else{num -= it->second;it->second = 0;qbuy.erase(it++);}}elsebreak;}if(num){qsell[price] += num;}}}long long ans = 0, mod = 1e9+7;for(auto it=qsell.begin(); it != qsell.end(); ++it){ans = (ans + it->second)%mod;}for(auto it=qbuy.begin(); it != qbuy.end(); ++it){ans = (ans + it->second)%mod;}return ans;} };

248 ms 62.9 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode 1801. 积压订单中的订单总数(map)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。