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

news/2024/7/20 18:03:16 标签: 华为od, 算法, 七日集训, 送书, 学习方法

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、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.niftyadmin.cn/n/5012582.html

相关文章

Qml Qt程序 打包部署

利用qtcreator安装目录下的命令行工具执行打包命令 1、Widget程序打包 // 将release模式下的exe文件放在单独的打包目录下 // 打开qt自带的命令行工具&#xff0c;执行下面的语句 windeployqt <path-to-app-binary> // path-to-app-binary表示需要打包的二进制文件 2…

前端实现展开收起的效果 (react)

需求背景&#xff1a;需要实现文本的展开收起效果&#xff0c;文本是一行一行的&#xff0c;数据格式是数组结构。 如图所示&#xff08;图片已脱敏&#xff09; 简单实现&#xff1a;使用一个变量控制展开收起效果。 展开收起逻辑部分&#xff08;react&#xff09; const […

指针-成绩统计

任务描述 请设计一个函数&#xff0c;以指针变量作为函数的参数&#xff0c;从标准输入上读入数量不定的成绩。统计全班成绩的总数量、90 分及以上成绩的个数、60 分及以上成绩的个数和全班成绩的平均分&#xff0c;并返回这四个数给主程序。编写主程序调用此函数完成统计功能…

直播APP源码搭建:核心的服务器系统

在现代科技的推动下&#xff0c;网络衍生出了各种各样的技术&#xff0c;每个技术都被应用到需要的APP上&#xff0c;直播APP源码搭建出来的APP就是其中的一个&#xff0c;然而&#xff0c;这些技术能够成功的在直播APP源码搭建的APP中稳定的为用户们提供功能与服务&#xff0c…

视频云存储/安防监控/AI分析/视频AI智能分析网关:垃圾满溢算法

随着我国科技的发展和城市化进程加快&#xff0c;大家对于生活环境以及空气质量更加重视&#xff0c;要求越来越严格。城市街道垃圾以及生活区垃圾满溢已经成为城市之痛。乱扔垃圾&#xff0c;垃圾不入桶这些行为已经严重影响到了城市的美化问题。特别是炎热的夏日和雨水季节&a…

基于Java SSM+layui+mysql实现的图书借记管理系统源代码+数据库

介绍 本项目使用的技术栈是SSMlayuimysql&#xff0c;服务器使用的是tomcat 其中书籍图片存放的位置需要先在tomcat根目录下conf/setting.xml中配置虚拟路径&#xff0c;本项目配置的是D:\upload 完整代码下载地址&#xff1a;图书借记管理系统 用户角色划分 游客 使用本系…

激光切割机在船舶行业的的应用有哪些

我国享有世界工厂的美誉&#xff0c;是全球制造业的主力。然而&#xff0c;在船舶制造的关键技术领域&#xff0c;我国的研发投入不足&#xff0c;技术进步仍滞后&#xff0c;我国高端船舶制造的实力仍显不足。 在我国制造业全面复苏的当前背景下&#xff0c;“精准制作”正构成…

Mysql加密功能

Mysql加密功能 InnoDB加密功能查询条件问题开启整个数据库加密 InnoDB加密功能 InnoDB是MySQL数据库引擎的一种&#xff0c;它提供了加密存储的功能。具体来说&#xff0c;InnoDB引擎支持以下两种方式的加密存储&#xff1a; 表级加密&#xff1a;InnoDB支持表级加密&#xff…