当前位置: 首页 > news >正文

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;}};
http://www.jsqmd.com/news/155894/

相关文章:

  • 【课程设计/毕业设计】基于Springboot的在线英语阅读平台的设计与实现基于springboot的大学生英语学习平台【附源码、数据库、万字文档】
  • 基于VUE的白告水果店[VUE]-计算机毕业设计源码+LW文档
  • Python3 日期和时间处理详解
  • 【课程设计/毕业设计】基于 SpringBoot+Vue+Java 实现酒店客房管理系统基于springboot的宾馆客房管理系统【附源码、数据库、万字文档】
  • 史上最强X3D CPU!9950X3D2首次曝光:双3D V-Cache、192MB缓存
  • 2025年哈尔滨正规的地铁广告价格,公交广告/户外led大屏广告/广播电台广告/地铁广告/电视台广告地铁广告公司排行榜单 - 品牌推荐师
  • MATLAB仿真与建模基础实战教程(从入门到实操,附完整可运行案例)
  • 8.8英寸“大手机”!华为MatePad Mini官降300元:2999元起 全系麒麟旗舰芯
  • GPU算力使用审计日志系统建设方案
  • 抖音运营资源合集
  • 卷积神经网络反向传播过程图解(PyTorch实现)
  • YOLO训练任务排队系统上线,资源公平调度
  • 2025年市场口碑好的层板货架制造厂家排行榜,阁楼货架/重型货架/仓储货架/层板货架/横梁货架,层板货架生产商排行榜 - 品牌推荐师
  • Conda环境导出为yml文件:共享PyTorch配置的最佳方式
  • 非root用户执行sudo命令时提示sudo: source: command not found
  • 【课程设计/毕业设计】基于SpringBoot的供应链管理系统的设计与实现供应链运营中采购、仓储、物流、销售环节【附源码、数据库、万字文档】
  • YOLO与Kubernetes集成:大规模集群部署的最佳实践
  • 2025必备10个降AI率工具,MBA必看!
  • Anaconda与Miniconda选择指南:哪个更适合PyTorch?
  • 2025热流道技术哪家强:8大顶尖厂商深度解析 - 栗子测评
  • Markdown转PDF发布技术文档:PyTorch教程制作指南
  • 震惊!AI应用架构师必知,构建企业级AI治理框架的绝世指南
  • 2025年国内有实力的层板货架供应厂家排行榜,穿梭式货架/中型货架/仓库货架/横梁货架,层板货架品牌口碑推荐 - 品牌推荐师
  • VPC 内相关组件详细介绍
  • Java计算机毕设之基于SpringBoot的生产供应链管理系统的设计与实现基于SpringBoot的供应链管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • Jupyter Lab插件推荐:增强PyTorch开发体验
  • Dify平台接入自定义PyTorch模型的方法详解
  • GPU算力租赁新思路:以开源技术内容吸引精准客户
  • GitHub Pages搭建个人技术博客发布PyTorch教程
  • Jupyter Notebook保存检查点:防止PyTorch训练中断丢失