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

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

在这里插入图片描述

目录

    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、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());
    // 数字序列A
    int[] A = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
    // 数字序列B
    int[] 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;

    // 遍历序列A
    while (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.niftyadmin.cn/n/4986682.html

相关文章

在css中设计好看的阴影

在css中设计好看的阴影 在本文中&#xff0c;我们将学习如何将典型的盒子阴影转换为更好看的的阴影。 统一角度 当我们想要一个元素有阴影时&#xff0c;会添加box-shadow属性并修改其中的数字&#xff0c;直到满意为止。 问题是&#xff0c;通过像这样单独创建每个阴影&…

漏洞修复:在应用程序中发现不必要的 Http 响应头

描述 blablabla描述&#xff0c;一般是在返回的响应表头中出现了Server键值对&#xff0c;那我们要做的就是移除它&#xff0c;解决方案中提供了nginx的解决方案 解决方案 第一种解决方案 当前解决方案会隐藏nginx的版本号&#xff0c;但还是会返回nginx字样&#xff0c;如…

chorme调试移动端web页面

chorme本地调试页面方法&#xff1a; 手机开启开发者模式 iphone找不到开发者模式方法&#xff1a; 下载爱思助手&#xff0c;点击工具箱&#xff0c;找到虚拟定位&#xff0c;点击创建定位&#xff0c;确定 打开iphone的隐私与安全即可找到开发者模式&#xff0c;点击确定即可…

PocketMiner:基于深度学习发现蛋白的隐式口袋

文章目录 1. 文章简介2. 前言3. 方法3.1 模型框架 4. 结果4.1 已知隐式口袋在分子动力学模拟分析迅速打开4.2 图神经网络模型能够准确预测模拟中口袋的动态变化4.3 隐式口袋数据集数据集揭示了新的隐式口袋形成的模式4.4 PocketMiner能够从无配体的蛋白结构中精准预测预测口袋4…

Git 中的 HEAD

1、Git HEAD 存放位置 HEAD 指的就是 .git/HEAD 文件&#xff0c;它存储着当前分支的名字&#xff0c;我们可以打这个文件看一看&#xff1a; ref: refs/heads/master由此&#xff0c;我们可以得知当前所处于 master 分支。 如果我们继续往下走&#xff1a;打开 refs/heads/…

十年JAVA搬砖路——软件工程概述

软件工程是一门关注软件开发过程的学科&#xff0c;它涉及到软件的设计、开发、测试、部署和维护等方面。软件工程的目标是通过系统化的方法和工具&#xff0c;以确保软件项目能够按时、按预算和按要求完成。 **• 软件工程的7个基本概念&#xff1a; ** **1. 软件生命周期&…

JAVA-斐波那契数列

输入一个整数 n &#xff0c;求斐波那契数列的第 n 项。 假定从 0 开始&#xff0c;第 0 项为 0 。 数据范围 0≤n≤39 样例 输入整数 n5 返回 5class Solution {public int Fibonacci(int n) {int[] dpnew int[250];dp[0]0;dp[1]1;for(int i2;i<n;i){dp[i]dp[i-1]dp[i-2];}…

LeetCode(力扣)236. 二叉树的最近公共祖先Python

LeetCode236. 二叉树的最近公共祖先 题目链接代码 题目链接 https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/ 代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val x # self.…