华为OD机试真题 Java 实现【支持优先级的队列】【2023 B卷 100分】

news2024/11/17 19:31:13

一、题目描述

实现一个支持优先级的队列,高优先级先出队列,同优先级时先进先出。

如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。

队列存储的数据内容是一个整数。

二、输入描述

一组待存入队列的数据(包含内容和优先级)。

三、输出描述

队列的数据内容(优先级信息输出时不再体现)。

四、补充说明

不用考虑数据不合法的情况,测试数据不超过100个。

五、解题思路

  1. 定义一个优先级队列;
  2. 先根据优先级比较;
  3. 再判断两个输入数据和优先级都相同,则后一个数据不入队列被丢弃;
  4. 输出优先级队列;

六、Java算法源码

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    // 优先级队列
    PriorityQueue<ComparePriority> queue = new PriorityQueue<>();
    String[] arr1 = sc.nextLine().split(",");
    for (int i = 0; i < arr1.length; i++) {
        String arr2 = arr1[i].replace("(", "").replace(")", "");
        String[] arr3 = arr2.split(":");
        // 数据
        int data = Integer.valueOf(arr3[0]);
        // 优先级
        int priority = Integer.valueOf(arr3[1]);
        /**
         * 实现一个支持优先级的队列,高优先级先出队列,同优先级时先进先出。
         * 如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。
         */
        ComparePriority comparePriority = new ComparePriority(data, priority);
        queue.add(comparePriority);
    }

    List<Integer> list = new ArrayList<>();
    ComparePriority comparePriority = queue.poll();
    while (comparePriority != null) {
        if (!comparePriority.equals(queue.peek())) {
            list.add(comparePriority.data);
        }
        comparePriority = queue.poll();
    }

    System.out.println(list);
}

/**
 * 实现一个支持优先级的队列,高优先级先出队列,同优先级时先进先出。
 *
 * 如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。
 */
static class ComparePriority implements Comparable<ComparePriority> {

    int data;
    int priority;

    public ComparePriority(int data, int priority) {
        this.data = data;
        this.priority = priority;
    }

    /**
     * 比较优先级
     */
    @Override
    public int compareTo(ComparePriority o) {
        return o.priority - this.priority;
    }

    /**
     * 如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }

        if (o == null || getClass() != o.getClass()) {
            return false;
        }

        ComparePriority comparePriority = (ComparePriority) o;
        return data == comparePriority.data && priority == comparePriority.priority;
    }
}

七、效果展示

1、输入

(100:1),(200:2),(300:3),(400:3)

2、输出

[300, 400, 200, 100]

3、说明

输入四组数据,每一组第一个数字为内容,第二个数字为优先级。

实现一个支持优先级的队列,高优先级先出队列,同优先级时先进先出。

如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。

数据300和400的优先级最高,都为3,按输入顺序输出,故300,400,然后是优先级为2的200、优先级为1的100。

在这里插入图片描述

4、下面测试一下“如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。”

(100:1),(100:1),(300:3),(400:3)

按道理,应该输出300, 400, 100。

下面,您来试一下?


🏆下一篇:华为OD机试真题 Java 实现【云短信平台优惠活动】【2023Q1 200分】

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

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

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

相关文章

Java官方笔记4类和对象

创建类 定义类Bicycle&#xff1a; public class Bicycle {// the Bicycle class has// three fieldspublic int cadence;public int gear;public int speed;// the Bicycle class has// one constructorpublic Bicycle(int startCadence, int startSpeed, int startGear) {gea…

李沐动手学习深度学习 2023年Win10 下安装 CUDA 和 Pytorch 跑深度学习(最新)

目录 一、安装Anaconda 1.下载Anaconda 测试是否安装成功 二、安装pytorch 验证pytorch是否安装成功 4.测试 3.配置pycharm 一、安装Anaconda 1.下载Anaconda 可以在官网下载&#xff0c;但是速度较慢&#xff0c;这里我选择了清华镜像源的下载 https://mirrors.tuna.t…

Gradio的web界面演示与交互机器学习模型,Blocks的事件侦听《7》

在第一篇文章我们就熟悉了Blocks的用法&#xff0c;使用Blocks比Interface更加灵活&#xff0c;这节重点关注Blocks里面的相关操作。 1、Blocks标准例子 import gradio as grdef greet(name):return "你好 " name "!"with gr.Blocks() as demo:name g…

简单的汉诺塔,神奇的预言,竟然需要5849亿年???(52)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 汉诺塔 古印度大梵天传说 Python玩转汉诺塔 递归 汉诺塔 汉诺塔(Hanoi)是一个著名的益智游戏&#xff0c;也称…

规则引擎架构-基于aviator

目录 aviator使用场景ASM 字节码操控框架aviator 表达式例子debug表达式类生成过程b-ca生成的class文件 aviator使用场景 github地址&#xff1a;aviator 使用场景&#xff1a; 规则判断及规则引擎公式计算动态脚本控制集合数据 ELT 等 …… ASM 字节码操控框架 asm实现&a…

【Dubbo】Dubbo架构的演进过程分析

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…

Go并发编程 Goroutine、Channel、Select、Mutex锁、sync、Atomic等

本文所有实例代码运行go版本&#xff1a;go version go1.18.10 windows/amd64 1 并发编程介绍 1.1 串行、并发、并行 串行&#xff1a;所有任务一件一件做&#xff0c;按照事先的顺序依次执行&#xff0c;没有被执行到的任务只能等待。最终执行完的时间等于各个子任务之和。…

效率神器!神级ChatGPT浏览器插件分享

大家好&#xff0c;我是卷了又没卷&#xff0c;薛定谔的卷的AI算法工程师「陈城南」~ 担任某大厂的算法工程师&#xff0c;带来最新的前沿AI知识和工具&#xff0c;欢迎大家交流~&#xff0c;后续我还会分享更多 AI 有趣工具和实用玩法&#xff0c;包括AI相关技术、ChatGPT、AI…

初识SpringBoot -- SpringBoot入门保姆级教程(一)

文章目录 前言一、初识SpringBoot1.SpringBoot简介2.用编译器IDEA创建SpringBoot项目3.在官网创建SpringBoot项目4.SpringBoot项目快速启动&#xff08;前后端分离基本能力&#xff09;5.了解SpringBoot起步依赖和启动类 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开…

RocketMQ消息消费

RocketMQ消息消费示例代码&#xff1a; public static void main(String[] args) throws InterruptedException, MQClientException {DefaultMQPushConsumer consumer new DefaultMQPushConsumer("please_rename_unique_group_name_4");consumer.setNamesrvAddr(&qu…

C++ 学习 ::【基础篇:15】:C++ 类的基本成员函数:析构顺序问题(全局/静态/局部量) 及 类类型(自定义类型)与析构函数

本系列 C 相关文章 仅为笔者学习笔记记录&#xff0c;用自己的理解记录学习&#xff01;C 学习系列将分为三个阶段&#xff1a;基础篇、STL 篇、高阶数据结构与算法篇&#xff0c;相关重点内容如下&#xff1a; 基础篇&#xff1a;类与对象&#xff08;涉及C的三大特性等&#…

Nginx配置块location及rewrite详解(遗憾)

文章目录 一、location配置块详解1.location 大致分为三类2.location 常用的匹配规则3.location 匹配的优先级4.location 匹配流程5.location 的实际使用&#xff08;1&#xff09;直接匹配网站根目录首页&#xff08;2&#xff09;处理静态文件请求&#xff08;3&#xff09;通…

函数式接口相关知识点

这里写目录标题 函数式接口简介以及注意点函数式接口作为方法的参数函数式接口作为方法参数常用的函数式接口Supplier简介具体代码操作 Consumer简介具体代码演示演示1演示2 Predicate接口简介以及接口中的方法text和negate方法and和or方法Function方法简介具体操作1具体操作2 …

SQL语句之DDL语言

说明&#xff1a;DDL&#xff08;Data Definition Language&#xff0c;数据定义语言&#xff09;&#xff0c;用来定义数据库对象(数据库、表)&#xff0c;包括了数据库和表的创建、查询、使用和删除操作。 一、数据库操作 新安装的数据库&#xff0c;默认有以下四个数据库&…

计算机网络-数据链路层

概念 结点&#xff1a;主机、路由器 链路&#xff1a;结点间物理通道 数据链路&#xff1a;结点间逻辑通道&#xff0c;控制数据传输协议的硬件和软件加到链路上构成数据链路 帧&#xff1a;链路层的协议数据单元&#xff0c;封装网络层数据报 数据链路层负责通过一条链路从一…

银行转账问题(死锁)

本文主要讲述死锁的一个经典案例—银行转账问题&#xff0c;并对该问题进行定位、修复。 1. 问题说明 当账户A对账户B进行转账时&#xff0c; 首先需要获取到两把锁&#xff1a;账户A和账户B的锁。获取两把锁成功&#xff0c;且余额大于0&#xff0c;则扣除转出人的余额&…

我记不住的那些C语言的struct知识

背景&#xff1a; 最近在重学C语言&#xff0c;目的是为了能看懂操作系统的底层代码&#xff0c;也为后续使用C语言开发一个类似redis数据库的中间件做准备&#xff0c;于是又重新踏上了学习C语言的道路&#xff0c;早在上学期间就学习过C语言&#xff0c;但是很久都不用了&…

ssm学习-spring01

Spring_day01 今日目标 掌握Spring相关概念完成IOC/DI的入门案例编写掌握IOC的相关配置与使用掌握DI的相关配置与使用1,课程介绍 对于一门新技术,我们需要从为什么要学、学什么以及怎么学这三个方向入手来学习。那对于Spring来说: 1.1 为什么要学? 从使用和占有率看 Spri…

使用 ChatGPT API 构建系统(一):分类

今天我学习了DeepLearning.AI的 Building Systems with the ChatGPT API 的在线课程&#xff0c;我想和大家一起分享一下该门课程的一些主要内容。 下面是我们通过Openai API来访问ChatGPT模型的主要代码&#xff1a; import openai#您的openai的api key openai.api_key YOUR…

chatgpt赋能python:Python删除节点:从入门到实践

Python删除节点&#xff1a;从入门到实践 在任何编程语言中&#xff0c;删除节点都是一个极为常见的操作。在Python中&#xff0c;它同样非常重要&#xff0c;因为我们通常会使用Python处理各种数据结构&#xff0c;诸如树、链表等等。但是&#xff0c;删除节点并不总是一件容…