【华为OD题库-102】排队游戏-java

题目

新来的老师给班里的同学排一个队。每个学生有一个能力值。一些学生是刺头,不会听老师的话,自己选位置,非刺头同学在剩下的位置按照能力值从小到大排。对于非刺头同学,如果发现他前面有能力值比自己高的同学,他不满程度就增加,增加的数量等于前面能力值比他大的同学的个数。刺头不会产生不满。如果整个班级累计的不满程度超过k,那么老师就没有办法教这个班级了.
输入描述
输入有三行:
第一行为n,m,k,空格隔开,分别表示班级总人数,刺头人数,最大不满程度k.
第二行为刺头所在位置(从0开始,即排队数组的下标,比如1代表队伍中第2个同学是刺头),位置的数组也是排序的.
第三行有n个数,空格隔开,表示老师排好的队中每人人的能力值,其中非刺头同学一定按照能力值从小到大排好序的
输出描述
0表示老师可以继续教这个班级
1表示老师无法继续教这个班级
说明:
n范围是[1,10000]
m范围是[1,n]
k范围是[1,1000000000]
每位同学的能力值范围是[1000,100000]
示例1:
输入
4 2 3
0 1
1810 1809 1801 1802
输出
1
说明
刺头在0,1位置,2号同学不满程度2(前面两人刺头能力值都比他大),3号同学不满程度2,总不满程度4,大于3。输出不能教这班(1).
示例2:
输入
4 2 4
0 1
1810 1809 1801 1802
输出:
0
说明:
同前,4不大于4,输出能教这个班(0)

思路

根据题意,知道一个能力值nums,并且知道其中刺头所在的索引。

  1. 直接遍历nums,当该位置为刺头时,将刺头数据加入一种数据结构存储起来,比如list
  2. 如果该位置不为刺头,此时查找list中比当前值还大的数据的个数,此个数就为当前学生的不满意程度
  3. 最后计算累计的不满意程度是否超过阈值k即可

关键在于第二步,方案有二:

  1. 直接写个单独的for循环查找,list中比给定值还大的元素个数
  2. 不使用list存刺头能力值数据,而是用TreeSet存,利用treeSet.tailSet()方法可以获取比指定元素大的元素个数,此时需要注意,刺头的能力值可能重复,因此treeSet中不能直接存放能力值,而是将能力值和索引一起存储,这样就不会有重复数据了

题解

package hwod;import java.util.*;public class QueueGame {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int k = sc.nextInt();int[] ctIdxs = new int[m];for (int i = 0; i < m; i++) {ctIdxs[i] = sc.nextInt();}int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = sc.nextInt();}System.out.println(queueGame2(nums, ctIdxs, k));}//方案一,循环查找/*** @param nums   班级能力值数组* @param ctIdxs 刺头所在的索引* @param k      最大不满程度* @return*/private static int queueGame(int[] nums, int[] ctIdxs, int k) {int notSatisfied = 0;//不满意程度int j = 0;List<Integer> list = new ArrayList<>();//存放刺头for (int i = 0; i < nums.length; i++) {if (j < ctIdxs.length && i == ctIdxs[j]) {list.add(nums[i]);j++;} else {//非刺头,计算前面必自己能力值大的个数,list中比自己还要大的个数notSatisfied += getBiggerThanNow(list, nums[i]);}}if (notSatisfied > k) return 1;return 0;}private static int getBiggerThanNow(List<Integer> list, int num) {int res = 0;for (int i = 0; i < list.size(); i++) {if (list.get(i) > num) res++;}return res;}//方案二:利用TreeSet存数据private static int queueGame2(int[] nums, int[] ctIdxs, int k) {int notSatisfied = 0;//不满意程度int j = 0;TreeSet<int[]> set = new TreeSet<>((o1, o2) -> {if (o1[1] != o2[1]) return o1[1] - o2[1];return o1[0] - o2[0];});//存放刺头,按照能力从小到大排,能力相同则根据索引从先到后排for (int i = 0; i < nums.length; i++) {if (j < ctIdxs.length && i == ctIdxs[j]) {set.add(new int[]{i, nums[i]});j++;} else {//非刺头,计算前面必自己能力值大的个数,set中比自己还要大的个数notSatisfied += set.tailSet(new int[]{i, nums[i]}).size();}}if (notSatisfied > k) return 1;return 0;}
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

说明

本专栏所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_31076523/article/details/134176793。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/236769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时间是如何定义的

每年365天&#xff0c;每天24小时&#xff0c;每小时60分钟&#xff0c;每分钟60s&#xff0c;这是我们习以为常的时间计量单位&#xff0c;那么在继续往下&#xff0c;1s是多少&#xff1f;几时几刻、几点几分是如何确定的&#xff1f;带着这些问题&#xff0c;展开本文。 1、…

常见分布的分布列/概率密度、分布函数、期望、方差、特征函数

0-1分布 二项分布 泊松分布 几何分布 均匀分布 正态分布 指数分布 伽马分布 卡方分布

2023.12.18 关于 CentOS7 安装 Redis5

目录 安装步骤 创建符号连接 修改配置文件 启动 redis 服务器 停止 redis 服务器 安装步骤 CentOS7 的 yum 仓库中&#xff0c;redis 的默认版本为 3 系列为了 能让 CentOS7 安装上 Redis5&#xff0c;此处我们需要安装额外软件源 1、安装额外软件源 yum install cento…

腾讯云消息队列11月产品月报 | RocketMQ 5.x 国际站上线

2023年 11月动态 消息队列 RocketMQ 版 1、5.x 形态国际站上线 国际站上线 5.x 集群全系列&#xff0c;第一批先开放新加坡和硅谷地域。 控制台链接&#xff1a;https://console.tencentcloud.com/trocketmq 2、 无感迁移能力 支持用户白屏化操作&#xff0c;将自建的 Roc…

提前预判和确认再做 现货白银投资的两种思路

在现货白银投资中&#xff0c;对于交易的步骤长期有两种看法。一种是提前预判行情并提前布局。另外一种是等待行情启动再做布局。这种两种方法要怎么选呢&#xff1f;笔者将从自己的角度出发&#xff0c;对这个问题进行讨论。 我们来看一下前一种的投资者&#xff0c;他们喜欢提…

标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”

各位CSDN的uu们好呀&#xff0c;今天&#xff0c;继续小雅兰西嘎嘎的学习&#xff0c;标准库中的string类&#xff0c;下面&#xff0c;让我们一起进入西嘎嘎string的世界吧&#xff01;&#xff01;&#xff01; string类的常用接口说明 Leetcode每日一题 string类的常用接口…

pip 常用指令 pip install 命令用法介绍

pip install 是一个 Python 包管理器命令&#xff0c;用于安装 Python 包。pip 是 Python 的一个重要工具&#xff0c;可以用来安装、升级和卸载 Python 包。 pip install 命令的一些常见参数有 -r&#xff1a;从一个需求文件中安装所有的包。-U 或 --upgrade&#xff1a;升级…

该目录不在项目的文件列表中,项目必须列出所有文件,或使用“include“模式

vue3 构建项目配置路由 router 的时候,因对某个类重命名后抛出如下异常 该目录不在项目的文件列表中,项目必须列出所有文件,或使用"include"模式 解决办法 前往 tsconfig.node.json 文件中对 include 新增 scr/icons/* 即可 {"extends": "./tsconfi…

TrustZone之问答

以下问题有助于测试您的知识。 在Arm架构中&#xff0c;安全状态和物理地址空间分别是什么&#xff1f; 在Arm架构中&#xff0c;安全状态分为安全状态和非安全状态。物理地址空间分为安全物理地址空间和非安全物理地址空间。 在每个异常级别中&#xff0c;是什么确定处理器处于…

鸿蒙开发基本概念

1、开发准备 1.1、UI框架 HarmonyOS提供了一套UI开发框架&#xff0c;即方舟开发框架&#xff08;ArkUI框架&#xff09;。方舟开发框架可为开发者提供应用UI开发所必需的能力&#xff0c;比如多种组件、布局计算、动画能力、UI交互、绘制等。 方舟开发框架针对不同目的和技术…

基于MLP完成CIFAR-10数据集和UCI wine数据集的分类

基于MLP完成CIFAR-10数据集和UCI wine数据集的分类&#xff0c;使用到了sklearn和tensorflow&#xff0c;并对图片分类进行了数据可视化展示 数据集介绍 UCI wine数据集&#xff1a; http://archive.ics.uci.edu/dataset/109/wine 这些数据是对意大利同一地区种植的葡萄酒进…

[SWPUCTF 2021 新生赛]jicao

首先打开环境 代码审计&#xff0c;他这儿需要进行GET传参和POST传参&#xff0c;需要进行POST请求 变量idwllmNB&#xff0c;进行GET请求变量json里需要含参数x以及jsonwllm 构造 得到flag

在线更换Proxmox VE超融合集群Ceph OSD磁盘

因为资源紧张的原因&#xff0c;担心一旦关机&#xff0c;虚拟机因为没有空闲的资源而被冻结&#xff0c;以致于不能漂移&#xff0c;导致部分服务停止&#xff0c;只好让机房帮忙热插拔。 幸运的是&#xff0c;插上去能够被系统所识别&#xff08;/dev/sdf就是新插入的硬盘&am…

ip静态好还是dhcp好?

选择使用静态 IP 还是 DHCP&#xff08;动态主机配置协议&#xff09;取决于您的网络需求和环境。下面是它们的一些特点和适用场景&#xff1a; 静态 IP&#xff1a; 固定的 IP 地址&#xff1a;静态 IP 是手动配置在设备上的固定 IP 地址&#xff0c;不会随时间或网络变化而改…

指针(3)计算最长的字符串长度(本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度)以及就题讲解malloc函数

题目要求 本题要求实现一个函数&#xff0c;用于计算有n个元素的指针数组s中最长的字符串的长度。 函数接口定义&#xff1a; int max_len( char *s[], int n ); 其中n个字符串存储在s[]中&#xff0c;函数max_len应返回其中最长字符串的长度。 裁判测试程序样例&#xff…

Redis多路复用在不同操作系统的性能

Redis多路复用 在redis中在不同系统中会使用不同的模型&#xff0c;但是多路复用的原理还是一个进程或者线程可以同时处理多个连接&#xff0c;不需要为每个连接都创建一个单独的线程或者进程。不同的多路复用机制在具体实现有一些差异&#xff0c;但是核心思想还是单个进程或…

C++ 如何使用二维map(二维map使用简单例子)

在C中&#xff0c;可以使用std::map来创建二维map。 首先&#xff0c;你需要包含<map>头文件&#xff1a; #include <map>然后&#xff0c;你可以声明一个map对象&#xff0c;其中一个维度用作键&#xff0c;另一个维度用作值。例如&#xff0c;如果你想创建一个…

华为数通方向HCIP-DataCom H12-831题库(多选题:181-200)

第181题 如图所示,R1、R2、R3、R4都部署为SPF区域0,链路的cost值如图中标识。R1、R2R3、R4的Loopback0通告入OSPF。R1、R2、R3与R4使用Loopback0作为连接接口,建立BGP对等体关系,其中R4为RR设备,R1、R2、R3是R4的客户端。当R4的直连地址172.20,1,4/32通告入BGP后,以下关R…

mysql部署 --(docker)

先查找MySQL 镜像 Docker search mysql &#xff1b; 拉取mysql镜像&#xff0c;默认拉取最新的&#xff1b; 创建mysql容器&#xff0c;-p 代表端口映射&#xff0c;格式为 宿主机端口&#xff1a;容器运行端口 -e 代表添加环境变量&#xff0c;MYSQL_ROOT_PASSWORD是root用户…

2024云渲染平台推荐!免费云渲染平台(注册账号)推荐

近期&#xff0c;由于信息科技和云计算的迅猛发展&#xff0c;云渲染服务也逐步蓬勃发展并已达到成熟阶段&#xff0c;它因其高效办公、成本效益优越以及操作简便易行&#xff0c;赢得了广大设计师和 CG 艺术家的热烈欢迎&#xff0c;在过去的岁月里&#xff0c;创造一张高清晰…