当前位置:网站首页>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阿明),一起加油、一起学习进步!
边栏推荐
猜你喜欢

Navicat 连接Oracle时提示oracle library is not loaded的问题解决

腾讯架构师是如何解释:Redis高性能通信的原理(精华版)

暴跌99.7%后,谁还在买卖「二舅币」?

IDEA相关配置(特别完整)看完此篇就将所有的IDEA的相关配置都配置好了、设置鼠标滚轮修改字体大小、设置鼠标悬浮提示、设置主题、设置窗体及菜单的字体及字体大小、设置编辑区主题、通过插件更换主题
面试官:可以谈谈乐观锁和悲观锁吗

Security First: Tools You Need to Know to Implement DevSecOps Best Practices

vulnhub W34kn3ss: 1

年轻人接棒大妈,金价跌回“4字头”,七夕迎黄金消费小热潮

今年上半年,我国公路建设总体形势持续向好

企业云成本管控,你真的做对了吗?
随机推荐
0725-面试记录
如何确保智能工厂的安全?
Enterprise cloud cost control, are you really doing it right?
新特性解读 | MySQL 8.0 GIPK 不可见主键
php弱类型-攻防世界lottery
How to ensure the security of smart factories?
MySQL表的约束
SQL 正则解析手机号码提供商
mysql四种隔离级别
Simulink脚本自动创建Autosar Parameter Port及Mapping
Playing in the cloud | The key technology of Tianyi cloud object storage ZOS high availability is revealed
ffmpeg cannot find libx264 after compilation
2021年下半年软件设计师上午真题
Go 语言快速入门指南: 介绍及安装
如何应对机器身份带来的安全风险
Go编译原理系列6(类型检查)
打补丁的日子,比写代码的日子难熬多了
9月起中国给予多哥等16国98%税目产品零关税待遇
年轻人接棒大妈,金价跌回“4字头”,七夕迎黄金消费小热潮
MySQL基本操作和基于MySQL基本操作的综合实例项目