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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

LeetCode 1912. 设计电影租借系统(map+set)

發布時間:2024/7/5 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1912. 设计电影租借系统(map+set) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

你有一個電影租借公司和 n 個電影商店。
你想要實現一個電影租借系統,它支持查詢、預訂和返還電影的操作。
同時系統還能生成一份當前被借出電影的報告。

所有電影用二維整數數組 entries 表示,其中 entries[i] = [shopi, moviei, pricei] 表示商店 shopi 有一份電影 moviei 的拷貝,租借價格為 pricei 。
每個商店有 至多一份 編號為 moviei 的電影拷貝。

系統需要支持以下操作:

  • Search:找到擁有指定電影未借出 的商店中 最便宜的 5 個 。
    商店需要按照 價格 升序排序,
    如果價格相同,則 shopi 較小 的商店排在前面。
    如果查詢結果少于 5 個商店,則將它們全部返回。
    如果查詢結果沒有任何商店,則返回空列表。
  • Rent:從指定商店借出指定電影,題目保證指定電影在指定商店 未借出 。
  • Drop:在指定商店返還 之前已借出 的指定電影。
  • Report:返回 最便宜的 5 部已借出電影 (可能有重復的電影 ID),將結果用二維列表 res 返回,
    其中 res[j] = [shopj, moviej] 表示第 j 便宜的已借出電影是從商店 shopj 借出的電影 moviej 。
    res 中的電影需要按 價格 升序排序;
    如果價格相同,則 shopj 較小 的排在前面;
    如果仍然相同,則 moviej 較小 的排在前面。
    如果當前借出的電影小于 5 部,則將它們全部返回。
    如果當前沒有借出電影,則返回一個空的列表。

請你實現 MovieRentingSystem 類:

  • MovieRentingSystem(int n, int[][] entries) 將 MovieRentingSystem 對象用 n 個商店和 entries 表示的電影列表初始化。
  • List<Integer> search(int movie) 如上所述,返回 未借出 指定 movie 的商店列表。
  • void rent(int shop, int movie) 從指定商店 shop 借出指定電影 movie 。
  • void drop(int shop, int movie) 在指定商店 shop 返還之前借出的電影 movie 。
  • List<List<Integer>> report() 如上所述,返回最便宜的 已借出 電影列表。

注意:測試數據保證 rent 操作中指定商店擁有 未借出 的指定電影,且 drop 操作指定的商店 之前已借出 指定電影。

示例 1: 輸入: ["MovieRentingSystem", "search", "rent", "rent", "report", "drop", "search"] [[3, [[0, 1, 5], [0, 2, 6], [0, 3, 7], [1, 1, 4], [1, 2, 7], [2, 1, 5]]], [1], [0, 1], [1, 2], [], [1, 2], [2]] 輸出: [null, [1, 0, 2], null, null, [[0, 1], [1, 2]], null, [0, 1]]解釋: MovieRentingSystem movieRentingSystem = new MovieRentingSystem(3, [[0, 1, 5], [0, 2, 6], [0, 3, 7], [1, 1, 4], [1, 2, 7], [2, 1, 5]]); movieRentingSystem.search(1); // 返回 [1, 0, 2] ,商店 1,0 和 2 有未借出的 ID 為 1 的電影。商店 1 最便宜,商店 0 和 2 價格相同,所以按商店編號排序。 movieRentingSystem.rent(0, 1); // 從商店 0 借出電影 1 。現在商店 0 未借出電影編號為 [2,3] 。 movieRentingSystem.rent(1, 2); // 從商店 1 借出電影 2 。現在商店 1 未借出的電影編號為 [1] 。 movieRentingSystem.report(); // 返回 [[0, 1], [1, 2]] 。商店 0 借出的電影 1 最便宜,然后是商店 1 借出的電影 2 。 movieRentingSystem.drop(1, 2); // 在商店 1 返還電影 2 。現在商店 1 未借出的電影編號為 [1,2] 。 movieRentingSystem.search(2); // 返回 [0, 1] 。商店 0 和 1 有未借出的 ID 為 2 的電影。商店 0 最便宜,然后是商店 1 。提示: 1 <= n <= 3 * 10^5 1 <= entries.length <= 10^5 0 <= shopi < n 1 <= moviei, pricei <= 10^4 每個商店 至多 有一份電影 moviei 的拷貝。 search,rent,drop 和 report 的調用 總共 不超過 10^5 次。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/design-movie-rental-system
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

class MovieRentingSystem {unordered_map<int, set<pair<int,int>>> unborrowed; //movie : <price, shop>set<vector<int>> borrowed; // <price, shop, movie>unordered_map<long long, int> m; // shop*k+movie, price, 根據 shop,movie,獲取其 pricelong long k = 10001; public:MovieRentingSystem(int n, vector<vector<int>>& entries) {for(auto& e : entries){unborrowed[e[1]].insert({e[2], e[0]});m[e[0]*k+e[1]] = e[2];}}vector<int> search(int movie) {if(unborrowed.find(movie) == unborrowed.end())return {};auto it = unborrowed[movie].begin();int i = 0;vector<int> ans;while(i < 5 && it != unborrowed[movie].end()) // 未借出電影的最便宜的5家店{ans.push_back((*it).second);i++;it++;}return ans;}void rent(int shop, int movie) {int price = m[shop*k+movie];borrowed.insert({price, shop, movie});//借出unborrowed[movie].erase({price, shop});if(unborrowed[movie].empty())unborrowed.erase(movie);}void drop(int shop, int movie) {int price = m[shop*k+movie];borrowed.erase({price, shop, movie});unborrowed[movie].insert({price, shop});//歸還}vector<vector<int>> report() {auto it = borrowed.begin();int i = 0;vector<vector<int>> ans;while(i < 5 && it != borrowed.end())//借出里面最便宜的5本{ans.push_back({(*it)[1], (*it)[2]});i++;it++;}return ans;} };

1268 ms 298.5 MB C++


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

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

總結

以上是生活随笔為你收集整理的LeetCode 1912. 设计电影租借系统(map+set)的全部內容,希望文章能夠幫你解決所遇到的問題。

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