当前位置:网站首页>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阿明),一起加油、一起学习进步!
边栏推荐
- Wechat Gymnasium Appointment Mini Program Graduation Design Finished Works Mini Program Graduation Design Finished Work (6) Question Opening Reply PPT
- ffmpeg编译后找不到libx264
- 在线文档Sheet技术解析
- Dream weaving prompt information prompt box beautification
- 我的递归从不爆栈
- MySQL基本查询和运算符
- Simulink脚本自动创建Autosar Parameter Port及Mapping
- 宝塔搭建实测-基于ThinkPHP5.1的wms进销存源码
- 安全至上:落地DevSecOps最佳实践你不得不知道的工具
- Go编译原理系列6(类型检查)
猜你喜欢

小程序毕设作品之微信体育馆预约小程序毕业设计成品(7)中期检查报告

2022高压电工特种作业证考试题库及答案

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

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

Mini Program Graduation Works WeChat Gymnasium Reservation Mini Program Graduation Design Finished Product (8) Graduation Design Thesis Template

基于HDF的LED驱动程序开发(1)

IReport常见问题及处理方法

Go 语言快速入门指南:第二篇 变量与常量

Simulink脚本自动创建Autosar Parameter Port及Mapping

mysql四种隔离级别
随机推荐
一文看懂推荐系统:概要01:推荐系统的基本概念
2022安全员-C证考试题库模拟考试平台操作
KunlunBase 1.0 is released!
技术人生 | 如何画业务大图
Mini Program Graduation Works WeChat Gymnasium Reservation Mini Program Graduation Design Finished Product (8) Graduation Design Thesis Template
新特性解读 | MySQL 8.0 GIPK 不可见主键
Gear 月度更新|6 月
多聚体/壳聚糖修饰白蛋白纳米球/mPEG-HSA聚乙二醇人血清白蛋白纳米球的制备与研究
如何减轻企业账户被劫持的攻击?
golang刷leetcode 经典(2)拓扑排序
天翼云4.0分布式云赋能千行百业数字化转型
How a "cloud" can bring about new changes in the industry
My recursive never burst stack
百问百答第49期:极客有约——国内可观测领域SaaS产品的发展前景
如何构建准实时数仓?
企业云成本管控,你真的做对了吗?
vulnhub W34kn3ss: 1
有关代购系统搭建的那点事
MySQL表的约束
脉脉上的相亲生意