当前位置:网站首页>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阿明),一起加油、一起学习进步!
边栏推荐
- Several common cross-domain solutions
- 面试官:可以谈谈乐观锁和悲观锁吗
- 技术人生 | 如何画业务大图
- MySQL基本查询和运算符
- Wechat Gymnasium Appointment Mini Program Graduation Design Finished Works Mini Program Graduation Design Finished Work (6) Question Opening Reply PPT
- golang刷leetcode动态规划(10)编辑距离
- 【秒杀办法】根据二叉树的先序遍历、中序遍历、后序遍历快速创建二叉树
- 深圳地铁16号线二期进入盾构施工阶段,首台盾构机顺利始发
- 0725-面试记录
- Flink学习9:配置idea开发flink-Scala程序环境
猜你喜欢

Google Earth Engine APP—— 一个不用写代码可以直接下载相应区域的1984-2021年的GIF遥感影像动态图

mui中使用多级选择器实现省市区联动

DevOps之代码检查

The days of patching are more difficult than the days of writing code

Wechat Gymnasium Appointment Mini Program Graduation Design Finished Work (5) Task Book

玩转云端 | 天翼云对象存储ZOS高可用的关键技术揭秘

数据治理:数据集成和应用模式的演进

红队实战靶场ATT&CK(一)

新特性解读 | MySQL 8.0 GIPK 不可见主键

AI+医疗:使用神经网络进行医学影像识别分析
随机推荐
redis summary_distributed cache
究极异常处理逻辑——多层次异常的处理顺序
Go编译原理系列6(类型检查)
Local broadcast MSE fragments mp4 service
安全至上:落地DevSecOps最佳实践你不得不知道的工具
C# 术语
如何应对机器身份带来的安全风险
How Tencent architects explained: The principle of Redis high-performance communication (essential version)
脉脉上的相亲生意
无法超越的100米_百兆以太网传输距离_网线有哪几种?
潮玩的“第二春”,在哪?
阿波罗 planning代码-modules\planning\lattice\trajectory_generation\PiecewiseBrakingTrajectoryGenerator类详解
55.【sort函数的升序降序】
影响PoE供电传输距离的除了网线还有啥?
故障分析 | 一条 SELECT 语句跑崩了 MySQL ,怎么回事?
STL案例-招聘新员工
2022最新版SSM源码分析:一套教程助你深入理解底层原理,提高核心竞争力!
打补丁的日子,比写代码的日子难熬多了
方法的使用
千万级QPS下服务如何才能平滑启动