当前位置:网站首页>LeetCode 2353. 设计食物评分系统(sortedcontainers)
LeetCode 2353. 设计食物评分系统(sortedcontainers)
2022-08-02 17:48:00 【Michael阿明】
1. 题目
设计一个支持下述操作的食物评分系统:
- 修改 系统中列出的某种食物的评分。
- 返回系统中某一类烹饪方式下评分最高的食物。
实现 FoodRatings
类:
FoodRatings(String[] foods, String[] cuisines, int[] ratings)
初始化系统。食物由 foods、cuisines 和 ratings 描述,长度均为 n 。foods[i]
是第 i 种食物的名字。cuisines[i]
是第 i 种食物的烹饪方式。ratings[i]
是第 i 种食物的最初评分。void changeRating(String food, int newRating)
修改名字为 food 的食物的评分。String highestRated(String cuisine)
返回指定烹饪方式 cuisine 下评分最高的食物的名字。如果存在并列,返回 字典序较小 的名字。
注意,字符串 x 的字典序比字符串 y 更小的前提是:x 在字典中出现的位置在 y 之前,也就是说,要么 x 是 y 的前缀,或者在满足 x[i] != y[i] 的第一个位置 i 处,x[i] 在字母表中出现的位置在 y[i] 之前。
示例:
输入
["FoodRatings", "highestRated", "highestRated", "changeRating", "highestRated", "changeRating", "highestRated"]
[[["kimchi", "miso", "sushi", "moussaka", "ramen", "bulgogi"], ["korean", "japanese", "japanese", "greek", "japanese", "korean"], [9, 12, 8, 15, 14, 7]], ["korean"], ["japanese"], ["sushi", 16], ["japanese"], ["ramen", 16], ["japanese"]]
输出
[null, "kimchi", "ramen", null, "sushi", null, "ramen"]
解释
FoodRatings foodRatings = new FoodRatings(["kimchi", "miso", "sushi", "moussaka", "ramen", "bulgogi"], ["korean", "japanese", "japanese", "greek", "japanese", "korean"], [9, 12, 8, 15, 14, 7]);
foodRatings.highestRated("korean"); // 返回 "kimchi"
// "kimchi" 是分数最高的韩式料理,评分为 9 。
foodRatings.highestRated("japanese"); // 返回 "ramen"
// "ramen" 是分数最高的日式料理,评分为 14 。
foodRatings.changeRating("sushi", 16); // "sushi" 现在评分变更为 16 。
foodRatings.highestRated("japanese"); // 返回 "sushi"
// "sushi" 是分数最高的日式料理,评分为 16 。
foodRatings.changeRating("ramen", 16); // "ramen" 现在评分变更为 16 。
foodRatings.highestRated("japanese"); // 返回 "ramen"
// "sushi" 和 "ramen" 的评分都是 16 。
// 但是,"ramen" 的字典序比 "sushi" 更小。
提示:
1 <= n <= 2 * 10^4
n == foods.length == cuisines.length == ratings.length
1 <= foods[i].length, cuisines[i].length <= 10
foods[i]、cuisines[i] 由小写英文字母组成
1 <= ratings[i] <= 10^8
foods 中的所有字符串 互不相同
在对 changeRating 的所有调用中,food 是系统中食物的名字。
在对 highestRated 的所有调用中,cuisine 是系统中 至少一种 食物的烹饪方式。
最多调用 changeRating 和 highestRated 总计 2 * 10^4 次
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/design-a-food-rating-system
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 使用 python 的有序 set
from sortedcontainers import SortedSet
,或者 C++ 的 set
from collections import defaultdict
from sortedcontainers import SortedSet
class FoodRatings:
def __init__(self, foods: List[str], cuisines: List[str], ratings: List[int]):
self.s = defaultdict(SortedSet)
self.map = {
}
for food, cuisine, rate in zip(foods, cuisines, ratings):
self.s[cuisine].add((-rate, food))
self.map[food] = [-rate, cuisine]
def changeRating(self, food: str, newRating: int) -> None:
rate, cuisine = self.map[food]
self.s[cuisine].discard((rate, food))
self.map[food] = [-newRating, cuisine]
self.s[cuisine].add((-newRating, food))
def highestRated(self, cuisine: str) -> str:
return self.s[cuisine][0][1]
708 ms 48.7 MB Python3
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
边栏推荐
- 发挥云网融合优势,天翼云为政企铺设数字化转型跑道
- 深圳地铁16号线二期进入盾构施工阶段,首台盾构机顺利始发
- redis summary_distributed cache
- Enterprise cloud cost control, are you really doing it right?
- C#里如何简单的校验时间格式
- 打补丁的日子,比写代码的日子难熬多了
- What is the difference between erp system and wms system
- LiveGBS国标GB/T28181流媒体平台支持主子码流切换主码流stream/streamprofile
- Security First: Tools You Need to Know to Implement DevSecOps Best Practices
- 搭建属于自己的知识库(Wikijs)
猜你喜欢
随机推荐
天翼云4.0来了!千城万池,无所不至!
Flink学习9:配置idea开发flink-Scala程序环境
如何应对机器身份带来的安全风险
什么是SVN(Subversion)?
2022高压电工特种作业证考试题库及答案
发挥云网融合优势,天翼云为政企铺设数字化转型跑道
一文看懂推荐系统:概要01:推荐系统的基本概念
MySQL基本操作和基于MySQL基本操作的综合实例项目
C# 术语
Wechat Gymnasium Appointment Mini Program Graduation Design Finished Work (5) Task Book
redis summary_distributed cache
golang刷leetcode滑动窗口(9) 颜色分类
技术人生 | 如何画业务大图
来亲自手搭一个ResNet18网络
LiveGBS国标GB/T28181流媒体平台支持主子码流切换主码流stream/streamprofile
脉脉上的相亲生意
面试官:可以谈谈乐观锁和悲观锁吗
NeRF:火爆科研圈的三维重建技术大揭秘
golang刷leetcode 字符串(4)逆波兰式
二叉查找树的查找