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

华为OD机试 - 最差产品奖 - 双端队列 deque(Java 2023 B卷 200分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

A公司准备对他下面的N个产品评选最差奖,评选的方式是首先对每个产品进行评分,然后根据评分区间计算相邻几个产品中最差的产品。评选的标准是依次找到从当前产品开始前M个产品中最差的产品,请给出最差产品的评分序列。

二、输入描述

第一行,数字M,表示评分区间的长度,取值范围是0<M<10000。
第二行,产品的评分序列,比如[12,3,8,6,5],产品数量N范围是-10000<N<10000。

三、输出描述

评分区间内最差产品的评分序列。

四、解题思路

  1. 读取输入的评分区间长度 M 和产品评分序列 scoreArr
  2. 创建一个双端队列 deque,用于存储最差产品的索引。
  3. 遍历评分序列的前 M 个产品,将索引添加到队列中。在添加索引之前,先将队列尾部不符合最差产品要求的索引移除。
  4. 创建一个列表 list,用于存储评分区间内最差产品的评分序列。
  5. 从第 M 个产品开始遍历评分序列,每次遍历都将队列头部的索引对应的评分添加到 list 中。
  6. 在添加新的索引之前,先将队列尾部不符合最差产品要求的索引移除。
  7. 检查队列的头部索引是否超出评分区间范围,如果超出,则移除头部索引。
  8. 将当前索引添加到队列中。
  9. 继续遍历下一个产品,直到遍历完整个评分序列。
  10. 最后,输出评分序列 list

五、Java算法源码

public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 评分区间的长度int M = Integer.valueOf(sc.nextLine());// 产品的评分序列int[] scoreArr = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();Deque<Integer> deque = new ArrayDeque<>();for (int i = 0; i < M; ++i) {while (!deque.isEmpty() && scoreArr[i] <= scoreArr[deque.getLast()]) {deque.pollLast();}deque.offer(i);}List<Integer> list = new ArrayList<>();for (int i = M; i < scoreArr.length; ++i) {list.add(scoreArr[deque.getFirst()]);while (!deque.isEmpty() && scoreArr[i] <= scoreArr[deque.getLast()]) {deque.pollLast();}deque.offer(i);while (deque.getLast() - deque.getFirst() + 1 > M) {deque.pollFirst();}}list.add(scoreArr[deque.getFirst()]);for (int i = 0; i < list.size() - 1; ++i) {System.out.print(list.get(i) + ",");}System.out.print(list.get(list.size() - 1));
}

六、效果展示

1、输入

3
5,7,3,4,1,9,8,2

2、输出

3,3,1,1,1,2

3、说明

  • 5,7,3最差3
  • 7,3,4最差3
  • 3,4,1最差1
  • 4,1,9最差1
  • 1,9,8最差1
  • 9,8,2最差2

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

http://www.lryc.cn/news/159051.html

相关文章:

  • 【校招VIP】前端算法考察之链表算法
  • uni-app之android离线自定义基座
  • 【AWS】实操-保护 Amazon S3 VPC 终端节点通信
  • C# Color颜色RGB对照表
  • Thread中几个常用的api详解join,interrupt
  • Golang项目实战(三)
  • TSUMU58CDT9-1显示器芯片方案
  • React 安装使用 Less(详细流程,包含 webpack、craco 方式)
  • 力扣(LeetCode)算法_C++—— 快乐数
  • 滴滴笔试——算式转移
  • [LeetCode] 128. 最长连续序列
  • docker 安装rabbitmq
  • 一文概览NLP句法分析:从理论到PyTorch实战解读
  • NPM 常用命令(三)
  • UWB学习——day1
  • 2023国赛数学建模C题模型代码
  • 2023年高教社杯数学建模国赛C题详细版思路
  • 互联网摸鱼日报(2023-09-07)
  • 并行处理系统
  • 2023国赛数学建模A题思路分析 - 定日镜场的优化设计
  • git企业级使用
  • [docker]笔记-存储管理
  • 记录获取蓝鲸智云token的过程
  • C语言AES加密解密字符串与16进制数据
  • NIFI实现JSON转SQL并插入到数据库表中
  • 【canal系】canal集群异常Could not find first log file name in binary log index file
  • ESP32C3 PWM输出
  • 二、GoLang输出HelloWorld、基本数据类型、变量常量定义、基本类型转换
  • mojo初体验
  • python3 重启docker方法