news 2026/3/5 21:16:30

LC.2353 | 设计食物评分系统 | 有序集合 | 负分数排序实现“最高分优先 + 字典序优先”

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LC.2353 | 设计食物评分系统 | 有序集合 | 负分数排序实现“最高分优先 + 字典序优先”

输入:

  • FoodRatings(foods, cuisines, ratings):初始化 n 种食物
  • changeRating(food, newRating):修改某个食物评分
  • highestRated(cuisine):查询某种烹饪方式下评分最高的食物(若并列取字典序更小)

要求:

  • 评分最高优先
  • 评分相同按字典序最小优先
  • 支持多次修改与查询

输出:

  • highestRated返回食物名

思路:

这题核心就是维护两个维度的信息:

1)食物 -> (菜系, 当前评分)

unordered_map<string, pair<string,int>> food_info存:

  • 方便changeRating(food, ...)时,O(1) 找到它属于哪个菜系 + 旧评分是多少。

2)菜系 -> 一棵有序结构,能随时拿到“最强的那个”

unordered_map<string, set<pair<int,string>>> cuisine_ratings存:

  • 每个菜系一个set,里面放(-rating, food)这样的二元组。
  • set默认按 pair 从小到大排序:
    • -rating越小,代表rating越大(最高分排最前)
    • -rating相同,就比较food字符串(字典序小的排前)
  • 所以highestRated(cuisine)直接返回begin()->second即可。

changeRating 怎么做?

对一个食物:

  1. food_info取出它的cuisineoldRating
  2. 在对应set里删除旧键(-oldRating, food)
  3. 插入新键(-newRating, food)
  4. 更新food_info[food].second = newRating

这样能保证每次修改后,菜系的“冠军”始终在set.begin()


复杂度:

  • 时间复杂度:
    • 初始化:O(N log N)(每次插入 set)
    • changeRating:O(log M)(M 为该 cuisine 下食物数)
    • highestRated:O(1)(取 begin)
  • 空间复杂度:O(N)

classFoodRatings{private:unordered_map<string,pair<string,int>>food_info;unordered_map<string,set<pair<int,string>>>cuisine_ratings;public:FoodRatings(vector<string>&foods,vector<string>&cuisines,vector<int>&ratings){for(inti=0;i<(int)foods.size();++i){food_info[foods[i]]={cuisines[i],ratings[i]};cuisine_ratings[cuisines[i]].insert({-ratings[i],foods[i]});}}voidchangeRating(string food,intnewRating){auto&info=food_info[food];string cuisine=info.first;intoldRating=info.second;cuisine_ratings[cuisine].erase({-oldRating,food});cuisine_ratings[cuisine].insert({-newRating,food});info.second=newRating;}stringhighestRated(string cuisine){returncuisine_ratings[cuisine].begin()->second;}};
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/4 2:30:06

计算机毕设java网络相册平台 基于Java的网络相册管理系统开发与实现 Java技术驱动的网络相册平台设计与构建

计算机毕设java网络相册平台bc5429 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 随着互联网的飞速发展&#xff0c;人们的生活方式发生了巨大的变化。在快节奏的现代生活中&…

作者头像 李华
网站建设 2026/3/4 3:31:04

如何彻底禁止Win11 自动更新? 这几种方法值得试试 !!win11更新怎么关闭?windows禁止更新工具插件,Win11永久关闭更新要怎么操作?

由于微软更新策略变更&#xff0c;出厂预装系统是无法禁用更新功能的&#xff0c;在联网检测到版本较低的情况下微软将强制推送更新通知。 那么如何彻底禁止Windows 10自动更新? win11更新怎么关闭&#xff1f;windows禁止更新工具插件,Win11永久关闭更新要怎么操作&#x…

作者头像 李华
网站建设 2026/3/5 20:35:51

GitHub Star增长秘诀:分享实用的PyTorch实战案例

GitHub Star增长秘诀&#xff1a;分享实用的PyTorch实战案例 在深度学习项目层出不穷的今天&#xff0c;你是否曾疑惑——为什么有些 GitHub 仓库代码并不复杂&#xff0c;却能轻松获得上千 Star&#xff1f;而另一些实现更精巧、算法更前沿的项目&#xff0c;反而无人问津&…

作者头像 李华
网站建设 2026/3/4 10:35:50

VPC 内相关组件详细介绍

Internet▲│┌───── IGW ─────┐│ │┌───────┴───────┐ ┌───┴────────┐│ Public Subnet │ │ Public Subnet││ (ALB / NAT) │ │ (ALB / NAT) ││ Route Table A │ │ Route Table A││ 0.0.0.0/…

作者头像 李华
网站建设 2026/3/4 2:35:48

GitHub Actions自动测试PyTorch环境的CI/CD配置

GitHub Actions 自动测试 PyTorch 环境的 CI/CD 配置 在深度学习项目日益复杂的今天&#xff0c;一个常见的场景是&#xff1a;开发者本地运行模型训练一切正常&#xff0c;提交代码后却在 CI 流水线中报错——“CUDA not available” 或 “torch version mismatch”。这种“在…

作者头像 李华
网站建设 2026/3/4 3:20:51

清华镜像源替换Anaconda默认通道的配置步骤

清华镜像源加速 Conda 环境配置&#xff1a;高效搭建 PyTorch 开发环境 在深度学习项目开发中&#xff0c;一个常见的“拦路虎”并不是模型调参或数据清洗&#xff0c;而是——环境装不上。 你是否经历过这样的场景&#xff1a;深夜赶论文复现实验&#xff0c;conda install py…

作者头像 李华