华为OD机试真题 Java 实现【阿里巴巴找黄金宝箱(II)】【2023 B卷 100分】,附详细解题思路

news2024/11/25 21:13:41

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
      • 1、题目关键点:
      • 2、大白话的意思就是
      • 3、比如
      • 4、思路这不就来了
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

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

专栏导读

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

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

在这里插入图片描述

一、题目描述

一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0-N的箱子,每个箱子上面贴有箱子中藏有金币的数量。

从金币数量中选出一个数字集合,并销毁贴有这些数字的每个箱子,如果能销毁一半及以上的箱子,则返回这个数字集合的最小大小。

二、输入描述

一个数字字串,数字之间使用逗号分隔,例如: 6,6,6,6,3,3,3,1,1,5字串中数字的个数为偶数,并且

1 <= 字串中数字的个数 <= 100000

1 <= 每个数字 <= 100000

三、输出描述

这个数字集合的最小大小,例如: 2

四、解题思路

1、题目关键点:

从金币数量中选出一个数字集合,并销毁贴有这些数字的每个箱子,如果能销毁一半及以上的箱子,则返回这个数字集合的最小大小。

2、大白话的意思就是

一个包含若干个正整数的数组,从中取出某些数字,最少取几次可以使取出数字的个数大于等于原有数组的一半。

3、比如

数组[1,2,3,3,3],第一次取出3,取了3个,大于等于原有数组的一半,搞定。

问题的关键是,要取出原有数组中个数最多的那个数字,和一半比较,再取第二多的,循环往复,次数绝对最少。

4、思路这不就来了

  1. 先找出数组中个数最多的数字,不,是按个数降序排序;
  2. 然后从降序数组中取数字,和原数组大小的一半(奇数的话向上取整)进行比较,大于等于即可;
  3. 输出一共取了几次。

五、Java算法源码

package com.guor.od;

import java.util.Scanner;
import java.util.*;
import java.util.HashMap;

public class OdTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 若干个带有数字的箱子
        String[] arr = sc.nextLine().split(",");

        /**
         * 数组中每个数字的个数
         * key:数字
         * value:个数
         */
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < arr.length; i++) {
            String str = arr[i];
            map.put(str, map.getOrDefault(str, 0) + 1);
        }

        // 按照数字的个数,降序排序
        List<Map.Entry<String, Integer>> mapList = new ArrayList<>(map.entrySet());
        mapList.sort((a, b) -> {
            return b.getValue() - a.getValue();
        });

        // 取出数字的个数之和
        int count = 0;
        // 原数组长度的一半,奇数的话向上取整
        int half = (int) Math.ceil((double) arr.length / 2);
        // 取了几次
        int step = 0;
        for (int i = 0; i < mapList.size(); i++) {
            // 某数字的个数
            count += mapList.get(i).getValue();
            step++;
            // 取出的个数大于等于原数组的一半
            if (count >= half) {
                break;
            }
        }
        // 输出一共取了几次
        System.out.println(step);
    }
}

六、效果展示

1、输入

1,2,3,4,5,5,5,4,4,3

2、输出

2

3、说明

  1. 一共10个数字,一半是5;
  2. 按个数降序排序3个4,3个5,2个3,1个2,1个1,[4,4,4,5,5,5,3,3,1,2]
  3. 先取出4,剩余[5,5,5,3,3,1,2],取出3个4,小于一半5;
  4. 再取5,剩余[3,3,1,2],取出3个5,上一次取3个4,共取出6个,大于等于一半5;
  5. 输出取出次数2;

在这里插入图片描述
在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法

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

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

在这里插入图片描述

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

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

相关文章

STM32单片机蓝牙APP语音识别智能记忆汽车按摩座椅加热通风儿童座椅

实践制作DIY- GC00160---智能记忆汽车按摩座椅 一、功能说明&#xff1a; 基于STM32单片机设计---智能记忆汽车按摩座椅 二、功能说明&#xff1a; 电路组成&#xff1a;STM32F103CXT6最小系统LD3322语音识别模块OLED显示3个ULN2003步进电机&#xff08;分别对应 前后距离、座…

小学期笔记——天天酷跑1

文件快照&#xff08;File snapshot&#xff09;通常是指对文件系统中某个特定时间点的文件或文件夹的快照或副本。它记录了文件或文件夹在某一时刻的状态&#xff0c;包括文件的内容、属性、权限、位置等信息。 文件快照通常用于数据备份、恢复和版本控制等目的。通过捕捉文件…

Stable-Diffusion-Webui部署SDXL0.9报错参数shape不匹配解决

问题 已经在model/stable-diffusion文件夹下放进去了sdxl0.9的safetensor文件&#xff0c;但是在切换model的时候&#xff0c;会报错model的shape不一致。 解决方法 git pullupdate一些web-ui项目就可以&#xff0c;因为当前项目太老了&#xff0c;没有使用最新的版本。

Windows10 任务栏图标的控制

文章目录 前言一、任务栏系统图标设置二、任务栏应用软件图标设置总结前言 在windows系统中,有一个常用功能,那就是在任务栏上图标化加载一些应用。为特殊目的,我们可以把一些常用软件启动后以图标形式摆放任务栏的右下角(例如QQ,微信)。不同的Window版本有不同的任务栏…

最受欢迎的12个Python开源框架,还没用过你就OUT了!!!

今天给大家带来了12个在GitHub等开源网站中最受欢迎的Python开源框架。如果你正在学习python&#xff0c;那么这12个开源框架&#xff0c;千万别错过&#xff0c;这些框架包括事件I/O&#xff0c;OLAP&#xff0c;Web开发&#xff0c;高性能网络通信&#xff0c;测试&#xff0…

【Redis】如何实现一个合格的分布式锁

文章目录 参考1、概述2、Redis粗糙实现3、遗留问题3.1、误删情况3.2、原子性保证3.3、超时自动解决3.4、总结 4、Redis实现优缺5、集群问题5.1、主从集群5.2、集群脑裂 6、RedLock7、Redisson7.1、简单实现7.2、看门狗机制 参考 Redisson实现Redis分布式锁的N种姿势 (qq.com)小…

第六章 复合查询

第六章 复合查询 一、前言二、笛卡尔积三、多表查询1、多表查询的理解2、笛卡尔积与多表拼接3、多表查询示例&#xff08;1&#xff09;显示雇员名、雇员工资以及所在部门的名字&#xff08;2&#xff09;显示部门号为10的部门名&#xff0c;员工名和工资&#xff08;3&#xf…

力扣热门100题之缺失的第一个正数【困难】

题目描述 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1…

Linux学习之while循环和until循环

while while的格式如下&#xff1a; while 条件表达式 do指令集 done若是条件表达式为真&#xff0c;那么才能执行do和done之间的指令集。若是第一次都不符合条件&#xff0c;就不会执行指令集。每次循环都会判断条件表达式&#xff0c;只要不符合&#xff0c;就会退出循环。…

【前端学JAVA】java的基础语法

theme: cyanosis 作为一个前端程序员&#xff0c;其发展前途是远不及后端程序员的。因此&#xff0c;只有了解后端&#xff0c;才能让自己更加具备核心竞争力。本系列教程将以一个前端程序员的角度快速学习JAVA。 新建项目 开发JAVA程序&#xff0c;我们第一步是使用IDEA新建…

VAE-根据李宏毅视频总结的最通俗理解

1.VAE的直观理解 先简单了解一下自编码器&#xff0c;也就是常说的Auto-Encoder。Auto-Encoder包括一个编码器&#xff08;Encoder&#xff09;和一个解码器&#xff08;Decoder&#xff09;。其结构如下&#xff1a; 自编码器是一种先把输入数据压缩为某种编码, 后仅通过该编…

CMU 15-445 -- Timestamp Ordering Concurrency Control - 15

CMU 15-445 -- Timestamp Ordering Concurrency Control - 15 引言Basic T/OBasic T/O ReadsBasic T/O WritesBasic T/O - Example #1Basic T/O - Example #2 Basic T/O SummaryRecoverable Schedules Optimistic Concurrency Control (OCC)OCC - ExampleSERIAL VALIDATIONOCC …

Linux:ELK:日志分析系统(使用elasticsearch集群)

原理 1. 将日志进行集中化管理&#xff08;beats&#xff09; 2. 将日志格式化&#xff08;logstash&#xff09; 将其安装在那个上面就对那个进行监控 3. 对格式化后的数据进行索引和存储&#xff08;elasticsearch&#xff09; 4. 前端数据的展示&#xff08;kibana&…

【MySQL】基本查询(表的增删查改)

目录 一、插入操作 --- insert1.1 单行指定列插入&&单行全列插入1.2 多行指定列插入&&多行全列插入1.3 插入否则更新 duplicate key update1.4 删除并替换 replace 二、查询操作 --- select2.1 基本查询2.2 where条件2.3 案例演示2.4 排序&#xff08;order by…

HDFS异构存储详解

异构存储 HDFS异构存储类型什么是异构存储异构存储类型如何让HDFS知道集群中的数据存储目录是那种类型存储介质 块存储选择策略选择策略说明选择策略的命令 案例&#xff1a;冷热温数据异构存储对应步骤 HDFS内存存储策略支持-- LAZY PERSIST介绍执行使用 HDFS异构存储类型 冷…

【代码随想录day20】二叉搜索树的最小绝对差

题目 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 思路 最简单的一个思路是使用中序遍历&#xff0c;从二叉排序树中得到有序序列&#xff0c;存储到self.elem中&…

静态 链接

1、空间与地址的分配 现在的链接器空间分配的策略基本上都采用 “相似段合并” 的方式。通过将所有相同类型的 section 合并到一起&#xff0c;例如将所有输入目标文件的 .text 合并&#xff08;按顺序合并&#xff09;到输出文件的 .text 节中&#xff1b;然后&#xff0c;链接…

EasyExcel实现多sheet excel导出

EasyExcel简介 Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行&#xff0c;但是一旦并发上来后一定会OOM或 者JVM频繁的full gc。 EasyExcel是阿里巴巴开源的一个excel处理框架…

eNSP的安装【最全最详细教程】

目录 一、下载软件和插件二、VirtualBox安装步骤三、WinPcap安装步骤四、Wireshark安装步骤五、eNSP安装步骤六、eNSP测试安装eNSP可能失败的原因 一、下载软件和插件 在安装eNSP之前分别要下载三个插件&#xff1a;VirtualBox、WinPcap、Wireshark 下载软件链接&#xff1a;…

集成学习概述

集成学习 1. 集成学习概念 集成学习是解决有监督机器学习任务的一类方法,它的思路是基于多个学习算法的集成来提升预测结果,它通过多个模型的组合形成一个精度更高的模型,参与组合的模型成为弱学习器(基学习器)。训练时,使用训练集依次训练出这些弱学习器,对未知的样本…