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

Leetcode.2353 设计食物评分系统

题目链接

Leetcode.2353 设计食物评分系统 Rating : 1782

题目描述

设计一个支持下述操作的食物评分系统:

  • 修改 系统中列出的某种食物的评分。

  • 返回系统中某一类烹饪方式下评分最高的食物。
    实现 FoodRatings类:

  • FoodRatings(String[] foods, String[] cuisines, int[] ratings)初始化系统。食物由 foods、cuisinesratings描述,长度均为 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之前,也就是说,要么 xy的前缀,或者在满足 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∗1041 <= n <= 2 * 10^41<=n<=2104
  • n==foods.length==cuisines.length==ratings.lengthn == foods.length == cuisines.length == ratings.lengthn==foods.length==cuisines.length==ratings.length
  • 1<=foods[i].length,cuisines[i].length<=101 <= foods[i].length, cuisines[i].length <= 101<=foods[i].length,cuisines[i].length<=10
  • foods[i]、cuisines[i]小写英文字母组成
  • 1<=ratings[i]<=1081 <= ratings[i] <= 10^81<=ratings[i]<=108
  • foods中的所有字符串 互不相同
  • 在对 changeRating的所有调用中,food是系统中食物的名字。
  • 在对 highestRated的所有调用中,cuisine是系统中 至少一种 食物的烹饪方式。
  • 最多调用 changeRatinghighestRated总计 2∗1042 * 10^42104

分析:

用两个 哈希表 分别记录:

  • unordered_map<string,pair<string,int>>建立 food -> (cuisine,rating)的映射关系
  • unordered_map<string,set<pair<int,string>>>建立 cuisine -> rating最高的,food字典序最小的映射关系 (-rating,food)

因为 set是有序列表,类似于JavaTreeSet,它会自动把里面的元素按 从小到大的顺序排序。如果里面的元素是pair,那么他会先按 pair的第一个元素排序,接着再按 pair的第二个元素排序。

所以我们只需要 按(-rating,food)插入元素,最后set第一个元素就是 Rating最高的,food字典序最小的 元素

代码:

class FoodRatings {
public:int n;// food ->(cuisine,rating)unordered_map<string,pair<string,int>> cf;//cuisine -> set(-rating,food)unordered_map<string,set<pair<int,string>>> fs;FoodRatings(vector<string>& foods, vector<string>& cuisines, vector<int>& ratings) {this->n = foods.size();//建立各自的映射关系for(int i = 0;i < n;i++){auto food = foods[i];auto c = cuisines[i];auto r = ratings[i];cf[food] = {c,r};fs[c].emplace(-r,food);}}void changeRating(string food, int newRating) {auto &[c,r] = cf[food];//删除旧的 -rating 记录fs[c].erase({-r,food});//插入新的 -newRating 记录fs[c].emplace(-newRating,food);//将 旧的r 改为 新的newRatingr = newRating;}string highestRated(string cuisine) {//set中第一个元素 的 second 就是rating最高的,food字典序最小的return fs[cuisine].begin()->second;}
};/*** Your FoodRatings object will be instantiated and called as such:* FoodRatings* obj = new FoodRatings(foods, cuisines, ratings);* obj->changeRating(food,newRating);* string param_2 = obj->highestRated(cuisine);*/

相关文章:

Leetcode.2353 设计食物评分系统

题目链接 Leetcode.2353 设计食物评分系统 Rating &#xff1a; 1782 题目描述 设计一个支持下述操作的食物评分系统&#xff1a; 修改 系统中列出的某种食物的评分。 返回系统中某一类烹饪方式下评分最高的食物。 实现 FoodRatings类&#xff1a; FoodRatings(String[] foo…...

C语言学习_DAY_2_变量的定义_输入与输出

高质量博主&#xff0c;点个关注不迷路&#x1f338;&#x1f338;&#x1f338;&#xff01; 目录 I. 变量的定义 II. 变量的赋值 III. 输出 IV. 输入 I. 变量的定义 首先&#xff0c;我们新建一个.c文件在Dev C中&#xff0c;并把之前定义好的程序框架放进去。 此时我…...

mac 安装navicat

由于各种原因发布不了链接&#xff0c;这里记录下&#xff0c;保存在了阿里云里...

RocketMQ快速入门

2.1 消息生产和消费介绍使用RocketMQ可以发送普通消息、顺序消息、事务消息&#xff0c;顺序消息能实现有序消费&#xff0c;事务消息可以解决分布式事务实现数据最终一致。RocketMQ有2种常见的消费模式,分别是DefaultMQPushConsumer和DefaultMQPullConsumer模式&#xff0c;这…...

【虚拟仿真】Unity3D实现从浏览器拉起本地exe程序并传参数

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 最近有项目需求&#xff0c;从浏览器调起来本地的exe程序&…...

Intel中断体系(1)中断与异常处理

文章目录概述中断与异常中断可屏蔽中断与不可屏蔽中断&#xff08;NMI&#xff09;异常异常分类中断与异常向量中断描述符表中断描述符中断与异常处理中断与异常处理过程堆栈切换错误码64位模式下的中断异常处理64位中断描述符64位处理器下的堆栈切换相关参考概述 中断是现代计…...

财报解读:四季度营收超预期,优步却越来越“不务正业”了

“公司第四季度的业绩表现将是强劲的”。 公布2022年第三季度财报时&#xff0c;优步的高管给出了这样的预告&#xff0c;给资本市场打了一针“强心剂”。然而有人对此表示质疑&#xff0c;后疫情时代&#xff0c;带着新模式、新车型的全新网约车公司层出不穷&#xff0c;车企…...

C语言-程序环境和预处理(14.2)

目录 预处理详解 1.预定义符号 2. #define 2.1 #define定义标识符 2.2 #define 定义宏 2.3 #define 替换规则 注意事项&#xff1a; 2.4 #和## 2.5 带副作用的宏参数 2.6 宏和函数对比 3. #undef 4. 条件编译 4.1 单分支条件编译 4.2 多分支条件编译 4.3 判断是…...

VHDL语言基础-时序逻辑电路-计数器

目录 计数器的设计&#xff1a; 计数器的作用&#xff1a; 计数器的实现&#xff1a; 1、用“”函数描述&#xff1a; 用T触发器级联构成的串行进位的二进制加法计数器的仿真波形&#xff1a; 计数器的仿真&#xff1a; 计数器的设计&#xff1a; 计数是一种最简单基本的…...

MySQL数据库07——高级条件查询

前面一章介绍了基础的一个条件的查询&#xff0c;如果多条件&#xff0c;涉及到逻辑运算&#xff0c;and or 之类的。就是高级一点的条件查询。本章来介绍复杂的条件搜索表达式。 AND运算符 AND运算符只有当两边操作数均为True时&#xff0c;最后结果才为True。人们使用AND描述…...

《Terraform 101 从入门到实践》 第四章 States状态管理

《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新&#xff0c;书中的示例代码也是放在GitHub上&#xff0c;方便大家参考查看。 军书十二卷&#xff0c;卷卷有爷名。 为什么需要状态管理 Terraform的主要作用是管理云平台上的资源&#xff…...

数据结构之二叉树

&#x1f388;一.二叉树相关概念 1.树 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合&#xff0c;树结构通常用来存储逻辑关系为 "一对多" 的数据。例如&#xff1a; 关于树的几个重要概念&…...

上海亚商投顾:三大指数集体调整 消费板块逆市活跃

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。市场情绪三大指数今日集体调整&#xff0c;沪指全天弱势震荡&#xff0c;创业板指盘中跌超1%。旅游、食品、乳业等大消费板块…...

【2023unity游戏制作-mango的冒险】-开始画面API制作

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;游戏制作 ⭐mango的冒险-开始画面制作⭐ 文章目录⭐mango的冒险-开始画面制作⭐&#x1f468;‍&…...

【微服务】Nacos配置管理

&#x1f6a9;本文已收录至专栏&#xff1a;微服务探索之旅 &#x1f44d;希望您能有所收获 Nacos除了可以做配置管理&#xff0c;同样可以当作注册中心来使用。 了解注册中心用法点击跳转&#x1f449;【微服务】Nacos注册中心 一.引入 当微服务部署的实例越来越多&#xff0…...

【C++】类与对象理解和学习(上)

专栏放在【C知识总结】&#xff0c;会持续更新&#xff0c;期待支持&#x1f339;类是什么&#xff1f;类是对对象进行描述的&#xff0c;是一个模型一样的东西&#xff0c;限定了类有哪些成员&#xff0c;定义出一个类并没有分配实际的内存空间来存储它&#xff08;实例化后才…...

Pyqt5小案例,界面与逻辑分离的小计算器程序

直接看下最终效果&#xff1a; 使用技术总结 使用Designer设计界面 使用pyuic5命令导出到python文件 新建逻辑处理文件&#xff0c;继承pyuic5导出的文件的类&#xff0c;在里面编写信号与槽的处理逻辑 使用Designer设计界面 要使用Designer&#xff0c;安装一个Python库即…...

leaflet加载KML文件,显示图形(方法2)

第049个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载KML文件,将图形显示在地图上。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果配置方式示例源代码(共66…...

Mysql 部署 MGR 集群

0. 参考文章 官方文档&#xff1a; MySQL :: MySQL 8.0 Reference Manual :: 18.2 Getting Started 博客&#xff1a; MGR 单主模式部署教程&#xff08;基于 MySQL 8.0.28&#xff09; - 墨天轮 (modb.pro) mysql MGR单主模式的搭建 - 墨天轮 (modb.pro) MySQL 5.7 基于…...

迁移至其他美国主机商时需要考虑的因素

网站的可访问性是关系业务的关键因素之一。一个稳定、快速且优化良好的主机上的网站更有可能享受不间断的流量&#xff0c;并在谷歌的SERP中获得更好的排名。因此&#xff0c;在构建企业网站时&#xff0c;选择合适的主机商相当重要。不过就以美国主机为例&#xff0c;由于每个…...

OpenClawWatch:本地优先的AI智能体监控工具,实现成本、安全与行为全链路追踪

1. 项目概述&#xff1a;为什么我们需要一个“本地优先”的AI智能体监控工具&#xff1f;如果你正在开发或运行能够自主执行任务的AI智能体&#xff0c;比如自动处理邮件、调用API、操作文件&#xff0c;甚至进行线上交易&#xff0c;那么你肯定经历过这样的焦虑时刻&#xff1…...

3步解锁SWF逆向工程:JPEXS开源工具深度解析

3步解锁SWF逆向工程&#xff1a;JPEXS开源工具深度解析 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 你是否曾面对一个陈旧的SWF文件束手无策&#xff1f;当Flash技术逐渐退出历史舞台…...

FPGA设计避坑指南:从复位电路到跨时钟域,手把手教你搞定亚稳态

FPGA实战&#xff1a;亚稳态问题全解析与工程级解决方案 在FPGA开发中&#xff0c;亚稳态问题如同潜伏的幽灵&#xff0c;往往在系统最不稳定的时候显现&#xff0c;导致数据错误、系统崩溃等难以追踪的故障。本文将从一个真实的UART接收模块案例出发&#xff0c;深入剖析亚稳态…...

AntiDupl.NET:告别数字杂乱,让图片管理回归优雅

AntiDupl.NET&#xff1a;告别数字杂乱&#xff0c;让图片管理回归优雅 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾经在整理照片时&#xff0c;发现手机里…...

TypeGPT:全局AI助手实现原理与配置指南,让大模型无缝融入工作流

1. 项目概述&#xff1a;一个全局AI助手&#xff0c;如何让大模型无处不在 如果你和我一样&#xff0c;每天的工作流里充斥着各种文本输入场景——写代码、回邮件、在文档里做笔记、甚至在聊天软件里跟同事讨论问题&#xff0c;那你肯定也想过&#xff1a;要是能让AI助手随时待…...

从零部署OpenClaw AI助手:多平台集成与私有化部署实战

1. 项目概述&#xff1a;从零部署你的专属AI助手 最近在折腾AI Agent&#xff0c;发现了一个挺有意思的开源项目叫OpenClaw。简单来说&#xff0c;它就像一个“万能接线员”&#xff0c;能把你的AI大模型&#xff08;比如GPT、Claude、GLM这些&#xff09;的能力&#xff0c;接…...

从NOIP真题到日常刷题:手把手教你用C++分离数字并统计(以‘数字统计’题为例)

从竞赛真题到实战技巧&#xff1a;C数字分离与统计的深度解析 在信息学竞赛的入门阶段&#xff0c;很多初学者面对"数字统计"这类题目时&#xff0c;往往陷入两个极端&#xff1a;要么死记硬背标准答案&#xff0c;要么被看似复杂的循环结构吓退。实际上&#xff0c;…...

OpenClaw-Readwise:自动化同步阅读笔记到Obsidian的实践指南

1. 项目概述&#xff1a;一个连接阅读与笔记的自动化桥梁 如果你和我一样&#xff0c;是个重度阅读爱好者&#xff0c;同时又在使用 Readwise 和 Obsidian 这类工具来管理自己的知识库&#xff0c;那你一定遇到过这个痛点&#xff1a;在 Readwise 里高亮、标注的精彩内容&…...

终极图形化方案:Applite如何让Mac软件管理变得简单快速

终极图形化方案&#xff1a;Applite如何让Mac软件管理变得简单快速 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 还在为Mac上的软件安装、更新和卸载而烦恼吗&#xff1f;Ap…...

ChatLLM-Web:快速构建LLM Web应用的轻量级框架解析

1. 项目概述&#xff1a;一个面向开发者的轻量级LLM Web应用框架 最近在折腾大语言模型本地部署和Web应用开发的朋友&#xff0c;可能都遇到过类似的困境&#xff1a;模型推理的后端代码写好了&#xff0c;但想做个界面给非技术同事或者自己用&#xff0c;就得从头搭一套前端&a…...