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

力扣(LeetCode)2512. 奖励最顶尖的K名学生(C++)

优先队列+哈希集合+反向思维(或自定义排序)

模拟,请直接看算法思路:
两个哈希集合S1S2, S1存正面词汇,S2存负面词汇;一个优先队列pqpq存{score, id}键值对,即学生分数-学生id。

算法流程:

  1. 初始化S1S2
  2. 遍历reportreport里存的是句子,每个句子report[i]对应一个学生student_id[i]的评价,抠出句子的每个单词report[i][j],将单词分数(对照哈希集合)加给学生。上述流程确定了学生student_id[i]的分数,将学生分数加入优先队列。
  3. 记录前k个学生id,存入答案数组ansans即为所求。

请注意:优先队列默认大根堆,按fisrt成员从大到小排序;在first成员相等时,按照second成员从大到小排序。score是first成员,id是second成员,出现矛盾:当score相同时,题目要求id从小到大排序。解决方法:1. 将score变为负数,或将id变为负数。2. 自定义排序规则(优先队列);本题解将score变为负数,解决了矛盾。

class Solution {
public:vector<int> topStudents(vector<string>& positive_feedback, vector<string>& negative_feedback, vector<string>& report, vector<int>& student_id, int k) {// 哈希集合unordered_set<string> S1, S2;vector<int> ans = vector<int> (k, 0); // 保存答案的ans顺序priority_queue <pair<int, int>, vector<pair<int,int>>> pq; // 存{score, id}键值对。for (int i = 0; i < positive_feedback.size(); i ++) {S1.insert(positive_feedback[i]);}for (int i = 0; i < negative_feedback.size(); i ++) {S2.insert(negative_feedback[i]);}for (int i = 0; i < report.size(); i ++) {int j = 0; // 遍历report[i];int score = 0, id = student_id[i];while (j < report[i].size()) {string t = "";while (j < report[i].size() && report[i][j] != ' ') {t += report[i][j ++];}j ++;if (S1.count(t)) score -= 3; // 得分,数值变小else if (S2.count(t)) score ++; // 扣分,数值变大}pq.push({score, id});if (pq.size() > k) pq.pop();}int i = k - 1;while (i >= 0) { // while (pq.size() && i >= 0) {int id = pq.top().second;pq.pop();ans[i --] = id;}return ans;}
};

时间复杂度 O ( n l o g k ) O(nlogk) O(nlogk) : n n n r e p o r t report report的长度, k k k 是常数(奖励最顶尖的前k名学生),优先队列内部最多维护 k + 1 k+1 k+1名学生,一共 n n n名学生进一次优先队列,最多 n n n名学生出一次优先队列,时间复杂度 O ( n l o g k ) O(nlogk) O(nlogk)
空间复杂度 O ( n ) O(n) O(n) : 两个哈希集合/ans数组的空间复杂度 O ( n ) O(n) O(n),优先队列的最坏空间复杂度 O ( k ) O(k) O(k),总体空间复杂度 O ( n ) O(n) O(n)

AC

ac

致语
  • 理解思路很重要。
  • 请读者放心留言,可以是疑惑的点,或者感谢/夸奖也可以!!墨染看到会回复的。

相关文章:

力扣(LeetCode)2512. 奖励最顶尖的K名学生(C++)

优先队列哈希集合反向思维(或自定义排序) 模拟&#xff0c;请直接看算法思路&#xff1a; 两个哈希集合S1和S2, S1存正面词汇&#xff0c;S2存负面词汇&#xff1b;一个优先队列pq&#xff0c;pq存{score, id}键值对&#xff0c;即学生分数-学生id。 算法流程&#xff1a; 初…...

CubeMX+BabyOS 使用方法

MCU&#xff1a;STM32G030F 编译器&#xff1a;MDK 托管工具&#xff1a;Sourcetree CubeMX创建工程 BabyOS克隆 添加子模块 git submodule add https://gitee.com/notrynohigh/BabyOS.git BabyOS 切换dev 分支 查看当前分支 git branch -a 切换本地分支到dev git che…...

OpenResty安装-(基于Nginx的高性能Web平台,可在Nginx端编码业务)

文章目录 安装OpenResty1.安装1&#xff09;安装开发库2&#xff09;安装OpenResty仓库3&#xff09;安装OpenResty4&#xff09;安装opm工具5&#xff09;目录结构6&#xff09;配置nginx的环境变量 2.启动和运行3.备注 安装OpenResty 1.安装 首先你的Linux虚拟机必须联网 …...

算法-DFS+记忆化/动态规划-不同路径 II

算法-DFS记忆化/动态规划-不同路径 II 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/unique-paths-ii 1.2 题目描述 2 DFS记忆化 2.1 思路 注意题意&#xff0c;每次要么往右&#xff0c;要么往下走&#xff0c;也就是说不能走回头路。但是仍有可能走到之前已经…...

黑盒测试方法:原理+实战

目录 一、如何设计测试用例 二、黑盒测试常用方法 1、基于需求进行测试用例的设计 2、等价类 3、边界值 4、判定表分析法&#xff08;因果分析法&#xff09; 5、正交表 6、场景设计法 三、案例补充 1、使用Fiddler模拟弱网 2、针对一个接口该如何测试 一、如何设计测试…...

SQLite事务处理

语法 BEGIN TRANSACTION; COMMIT TRANSACTION; &#xff08;或END TRANSACTION;&#xff09; ROLLBACK TRANSACTION; 事务处理 除了一些PRAGMA语句以外&#xff0c;其它访问数据库的语句会自动启动事务处理&#xff0c;并且在结束时自动提交。 通过上一节的命令可以手动控制…...

Java中CountDownLatch使用场景

在Java的并发API中&#xff0c;CountDownLatch是一个同步器&#xff0c;它允许一个或多个线程等待一组操作完成。 如果您正在开发一个服务器应用程序&#xff0c;该应用程序在开始处理请求之前需要初始化各种资源。这些资源可能是这样的&#xff1a; 加载配置文件建立数据库连…...

漏刻有时数据可视化Echarts组件开发(41)svg格式地图应用

1.定义SVG文件 var svg ;2.注册地图函数 Echarts.registerMap是Echarts图表库中用于注册地图的函数。它可以将第三方地图或自定义地图数据与Echarts进行集成&#xff0c;使用Echarts的API进行绘制。使用方法如下&#xff1a; echarts.registerMap(mapName, geoJson) 参数map…...

firefox的主题文件位置在哪?记录以防遗忘

这篇文章写点轻松的 最近找到了一个自己喜欢的firefox主题,很想把主题的背景图片找到,所以找了下主题文件所在位置 我的firefox版本:版本: 118.0.1 (64 位)主题名称: Sora Kawai 我的位置在 C:\Users\mizuhokaga\AppData\Roaming\Mozilla\Firefox\Profiles\w0e4e24v.default…...

Vuex获取、修改参数值及异步数据处理

14天阅读挑战赛 学不可以已... 目录 一、Vuex简介 1.1 vuex介绍 1.2 vuex核心 二、Vuex使用 2.1 Vuex安装 2.2 创建store模块 2.3 创建vuex的store实例并注册上面引入的各大模块 三、使用Vuex获取、修改值案例 3.1 创建两个菜单组件 3.2 配置路由 3.3 模拟菜单数据 …...

【 OpenGauss源码学习 —— 列存储(autoanalyze)(二)】

列存储&#xff08;autoanalyze&#xff09;&#xff08;二&#xff09; 概述PgStat_StatTabEntry 结构体pgstat_count_heap_insert 与 pgstat_count_cu_insert 函数CStoreInsert::BatchInsertCommon 函数pgstat_count_cu_update 函数pgstat_count_cu_delete 函数pgstat_count_…...

使用postman 调用 Webservice 接口

1. 先在浏览器地址栏 访问你的webService地址 地址格式: http://127.0.0.1:8092/xxxx/ws(这个自己的决定)/xxxxXccv?wsdl 2. post man POST 访问wwebService接口 地址格式: http://127.0.0.1:8092/xxxx/ws(这个自己的决定)/xxxxXccv <soapenv:Envelope xmlns:soapenv…...

程序员Google插件推荐

文章目录 AdBlock (广告拦截插件)SuperCopy 超级复制Octotree (github增强工具)GitZip for github (github增强工具)JSON-handleSimpleExtManager(管理谷歌插件)OneTab (标签页合并)PostWoman(接口调试)篡改猴 (Tampermonkey)FeHelper(前端助手) AdBlock (广告拦截插件) ☆ 拦截…...

机器学习中常见的监督学习方法和非监督学习方法有哪些。

问题描述&#xff1a;最近面试某些公司算法岗&#xff0c;看到一道简答题&#xff0c;让你举例熟悉的监督学习方法和非监督学习方法。 问题解答&#xff1a; 监督学习方法常见的比较多&#xff1a; 线性回归&#xff08;Linear Regression&#xff09;&#xff1a; 用于回归问…...

UEFI基础——测试用例Hello Word

Hello 测试用例 硬件环境&#xff1a;龙芯ls3a6000平台 软件环境&#xff1a;龙芯uefi固件 GUID获取网址&#xff1a;https://guidgen.com 一、创建工程 mkdir TextPkg/三个文件 Hello.c 、 Hello.inf 、HelloPkg.dsc 1.1 Hello.c /** fileThe application to print hello …...

【tomcat、java】

java&#xff1a;maven配置 1.安装插件 <build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port&…...

京东获取推荐商品列表 API

item_recommend-获取推荐商品列表 请求参数 请求参数&#xff1a;type 参数说明&#xff1a;type:推荐类型 进入API测试页 响应参数 Version: Date: 名称类型必须示例值描述 items items[]0获取推荐商品列表 num_iid Bigint010021415166448宝贝ID detail_url String0http…...

rust cfg的使用

前提是一个crate倒入另一个crate。 先看结构 test_lib目录结构 这与另一个crate处于同一个目录,所以另一crate倒入的时候在Cargo.toml中使用如下语句。 test_lib = {path = "../test_lib" }先在test_lib/src/abc/abc.rs中添加没有cfg的两个函数做测试。 pub fn…...

电脑屏幕怎么录制?5 个最佳免费录屏软件

您是否想使用网络摄像头录制优酷视频、抖音直播或在线课程等项目&#xff0c;但完全不知道如何开始&#xff1f; 不用担心。有很多软件选项可以帮助您。虽然每一款都有不同的功能&#xff0c;但它们都能够录制网络摄像头并输出精美的高质量视频。 以下是我们精选的最佳作品。…...

vscode 调试使用 make 编译的项目

1、首先点击运行 --> 启动调试&#xff1a; 2、选择g或gcc生成和调试活动文件&#xff1a; 3、出现下面提示是正常的&#xff0c;点击仍要调试&#xff1a; 点击打开“launch.json”&#xff1a; 4、此时会在项目工作目录下生成tsak.josn和launch.json文件&#xff1a; 如…...

CUDA并行计算与FSR框架优化实践

1. CUDA并行计算与FSR框架概述在GPU加速计算领域&#xff0c;CUDA&#xff08;Compute Unified Device Architecture&#xff09;作为NVIDIA推出的并行计算平台和编程模型&#xff0c;已经成为高性能计算的事实标准。其核心设计理念是将计算任务分解为网格&#xff08;Grid&…...

航空发动机叶片三维扫描-诺斯顿

航空发动机叶片作为发动机的核心动力部件&#xff0c;其精度与性能直接决定发动机的推力、燃油效率及运行安全性&#xff0c;三维扫描技术作为航空制造领域的核心数字化手段&#xff0c;已广泛应用于叶片全生命周期的多个关键环节。其应用涵盖叶片研发设计阶段的逆向工程&#…...

从《王者荣耀》野怪巡逻到RTS单位集结:拆解Unity Navigation系统在实战中的4种高级用法

从《王者荣耀》野怪巡逻到RTS单位集结&#xff1a;拆解Unity Navigation系统在实战中的4种高级用法在MOBA游戏中&#xff0c;野怪沿着固定路线巡逻时突然转向追击玩家&#xff1b;RTS战场上&#xff0c;上百个单位向同一目标点移动却能保持整齐队形&#xff1b;潜行游戏中&…...

Visual C++运行库一键安装指南:彻底解决Windows应用依赖问题

Visual C运行库一键安装指南&#xff1a;彻底解决Windows应用依赖问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过打开软件时弹出"缺少…...

Driver Store Explorer终极指南:快速清理Windows驱动存储的完整教程

Driver Store Explorer终极指南&#xff1a;快速清理Windows驱动存储的完整教程 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer Driver Store Explorer&#xff08;又称RAPR&#xff09…...

机器学习赋能微服务架构拆分:从图划分到智能决策的工程实践

1. 从单体巨石到微服务&#xff1a;为什么我们需要机器学习的“火眼金睛”在软件架构演进的漫长征途中&#xff0c;我们正经历一场深刻的范式转移。曾几何时&#xff0c;单体架构&#xff08;Monolithic Architecture&#xff09;因其开发简单、部署直接而大行其道&#xff0c;…...

Construct3新手避坑指南:用《幽灵射手》教程搞定你的第一个射击游戏(附B站效果演示)

Construct3新手避坑指南&#xff1a;用《幽灵射手》教程搞定你的第一个射击游戏第一次打开Construct3的《幽灵射手》教程时&#xff0c;我盯着满屏的绿色幽灵和事件表发呆了半小时。为什么子弹穿过了幽灵却没造成伤害&#xff1f;为什么游戏运行三秒后就卡成幻灯片&#xff1f;…...

Lumafly:跨平台空洞骑士模组管理器,智能依赖解析与一站式管理解决方案

Lumafly&#xff1a;跨平台空洞骑士模组管理器&#xff0c;智能依赖解析与一站式管理解决方案 【免费下载链接】Lumafly A cross platform mod manager for Hollow Knight written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/lu/Lumafly Lumafly是一款基于…...

3分钟掌握ncmdump:专业级网易云音乐NCM格式解密方案

3分钟掌握ncmdump&#xff1a;专业级网易云音乐NCM格式解密方案 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在第三方播放器播放而困扰吗&#xff1f;ncmdump正是解决这一痛点的专业工具。…...

数据驱动VS物理模型:随机森林在电动汽车跟驰行为预测中的精度革命

1. 项目概述与核心价值在智能交通和自动驾驶技术快速发展的今天&#xff0c;如何精准地模拟和预测道路上车辆的跟驰行为&#xff0c;成为了一个既基础又关键的研究课题。无论是为了设计更安全的辅助驾驶系统&#xff0c;还是为了构建更真实的交通流仿真环境&#xff0c;一个可靠…...