脚本宝典收集整理的这篇文章主要介绍了编程考试-设计系统,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
所有电影用二维整数数组 entries
表示,其中 entries[i] = [shopi, moviei, PRicei]
表示商店 shopi
有一份电影 moviei
的拷贝,租借价格为 pricei
。每个商店有 至多一份 编号为 moviei
的电影拷贝。
系统需要支持以下操作:
shopi
较小 的商店排在前面。如果查询结果少于 5 个商店,则将它们全部返回。如果查询结果没有任何商店,则返回空列表。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 * 105
1 <= entries.length <= 105
0 <= shopi < n
1 <= moviei, pricei <= 104
moviei
的拷贝。search
,rent
,drop
和 report
的调用 总共 不超过 105
次。
class MovieRentingSystem { public: set<pair<int, int>> mv[100001]; set<pair<int, pair<int, int>>> rt; map<pair<int, int>, int> prc; MovieRentingSystem(int n, vector<vector<int>>& entries) { for (size_t i = 0; i < entries.size(); i++) { int x=entries[i][0], y=entries[i][1], z=entries[i][2]; prc[make_pair(x, y)] = z; mv[y].insert(make_pair(z, x)); } } vector<int> search(int movie) { auto IT = mv[movie].begin(); vector<int> v; for (size_t i=0; i<5 && it!=mv[movie].end(); i++,it++) v.push_back(it -> second); return v; } void rent(int shop, int movie) { int price = prc[make_pair(shop, movie)]; mv[movie].erase(make_pair(price, shop)); rt.insert(make_pair(price, make_pair(shop, movie))); } void drop(int shop, int movie) { int price = prc[make_pair(shop, movie)]; mv[movie].insert(make_pair(price, shop)); rt.erase(make_pair(price, make_pair(shop, movie))); } vector<vector<int>> report() { auto it = rt.begin(); vector<vector<int>> v; for (size_t i=0; i<5 && it!=rt.end(); i++,it++) v.push_back({(it->second).First, (it->second).second}); return v; } };
以上是脚本宝典为你收集整理的编程考试-设计系统全部内容,希望文章能够帮你解决编程考试-设计系统所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。