华为OD机试 - 数字序列比大小 - 贪心算法(Java 2023 B卷 100分)

news/2025/2/12 8:01:19/

在这里插入图片描述

目录

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

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

一、题目描述

A,B两个人万一个数字比大小的游戏,在游戏前,两个人会拿到相同长度的两个数字序列,两个数字序列不相同且其中的数字是随机的。

A,B各自从数字序列中挑选出一个数字进行大小比较,赢的人得1分,输的人扣1分,相等则各自的分数不变,用过的数字需要丢弃。

求A可能赢B的最大分数。

二、输入描述

输入数据的第一个数字表示数字序列的长度N,后面紧跟着两个长度为N的数字序列。

三、输出描述

A可能赢B的最大分数。

这里要求计算A可能赢B的最大分数,不妨假设,A知道B的数字序列,且总是B先挑选数字并明示;

可以采用贪心策略,能赢的一定要赢,要输的尽量减少损失。

四、解题思路

这是典型的田忌赛马问题,首先将两个序列排序,然后遍历序列A,每次找到序列B中比A[i]小的数字中最大的数字即可。

五、Java算法源码

/*** 田忌赛马,永远比你大,你服不服?*/
public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 数字序列的长度int N = Integer.parseInt(sc.nextLine());// 数字序列Aint[] A = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();// 数字序列Bint[] B = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();// 排序Arrays.sort(A);Arrays.sort(B);// 序列A最小值下角标int left_a = 0;// 序列A最大值下角标int right_a = N - 1;// 序列B最小值下角标int left_b = 0;// 序列B最大值下角标int right_b = N - 1;// A可能赢B的最大分数int max = 0;// 遍历序列Awhile (left_a <= right_a) {// 赢的人得1分if (A[right_a] > B[right_b]) {max += 1;right_a--;right_b--;// 输的人得1分} else if (A[right_a] < B[right_b]) {max -= 1;left_a++;right_b--;} else {//相等则各自分数不变if (A[left_a] > B[left_b]) {max += 1;left_a++;left_b++;} else {if (B[right_b] > A[left_a]) {max -= 1;}left_a++;right_b--;}}}System.out.println(max);
}

六、效果展示

1、输入

3
7 5 9
4 6 8

2、输出

3

3、说明

  • 7比6大得一分;
  • 5比4大得一分;
  • 9比8大得一分;

田忌赛马,永远比你大,你服不服?
在这里插入图片描述


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

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

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

在这里插入图片描述


http://www.ppmy.cn/news/1074546.html

相关文章

kafka+Kraft模式集群+安全认证

Kraft模式安全认证 前章内容聊到了Kafka的Kraft集群的配置及使用。本篇再来说说kafka的安全认证方面的配置&#xff0c;。 Kafka提供了多种方式来进行安全认证&#xff0c;包括身份认证、授权和加密传输。一些常用的Kafka安全认证方式&#xff1a; SSL/TLS&#xff1a;使用S…

【Docker】02-安装mysql

参考教程&#xff1a; https://www.bilibili.com/video/BV1Qa4y1t7YH/?p5&spm_id_frompageDriver&vd_source4964ba5015a16eb57d0ac13401b0fe77 docker安装Mysql 1、拉取最新版本的镜像 docker pull mysq:latestl 2、运行mysql服务 docker run --name mysql -e MYSQL_…

SpringBoot 使用 EMQX

一、SpringBoot服务器端 1. 在centos搭建 EMQX服务 2. 创建API密码 3. 在SpringBoot 的yml中添加mqqt的配置 #配置 emqx:ip: 47.109.49.176port: 18083api: xxxxxxxx &#xff08;自己的api&#xff09;secret: xxxxxxxxx &#xff08;自己的secret&#xff09; 4. 因为…

嵌入式Linux开发实操(十五):nand flash接口开发

# 前言 flash memory,分NAND和NOR: 如果说nor flash有个特点就是能执行代码,NOR并行接口具有地址和数据总线,spi flash更是主要用于存储代码,SPI(或QSPI)NOR代码可就地执行(XiP),一般系统要求flash闪存提供相对较高的频率和数据缓存的clocking。而nand flash主要用于…

【2023百度之星备赛】码蹄集 BD202301 公园(BFS求最短路)

题目 https://www.matiji.net/exam/brushquestion/1/4347/179CE77A7B772D15A8C00DD8198AAC74?from1 题目大意&#xff1a; 给定一个无向图&#xff0c;有两个人往同一个目的地走&#xff0c;分别消耗体力TE、FE。如果他们到某个点汇合了&#xff0c;然后一起走向目的地&…

Unity——协程(Coroutine)

本文为问GPT所得 一、在Unity中&#xff0c;协程到底是个啥 在Unity中&#xff0c;协程&#xff08;Coroutine&#xff09;是一种特殊的函数&#xff0c;用于在一段时间内暂停执行&#xff0c;并在稍后的时间点继续执行。通常情况下&#xff0c;我们在代码中通过调用协程来实现…

大集合按照指定长度进行分割成多个小集合,用于批量多次处理数据

&#x1f4da;目录 拆分案例拆分的核心代码 通常我们对集合的更新或者保存都需要用集合来承载通过插入的效率&#xff0c;但是这个会遇到一个问题就是你不知道那天那个集合的数量可能就超了&#xff0c;虽然我们连接数据库进行批量提交会在配置上配置allowMultiQueriestrue,但是…

爬虫逆向实战(二十八)--某税网第一步登录

一、数据接口分析 主页地址&#xff1a;某税网 1、抓包 通过抓包可以发现登录接口是factorAccountLogin 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看载荷模块可以发现有一个datagram 和 一个signature加密参数 请求头是否加密&#xff1f; 通过查看“标…