算法:阿里巴巴找黄金宝箱(II)

news2024/11/15 12:44:23
一、算法描述
题目描述
一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0-N的箱子,
每个箱子上面贴有箱子中藏有金币Q的数量。 从金币数量中选出一个数字集合,
并销毁贴有这些数字的每个箱子,如果能销毁一半及以上的箱子,则返回这个数字集合的最小大小
输入描述:
第一行1个数字字串,数字之间使用逗号分隔,例如:6,6,6,6,3,3,3,1,1,5字串中数字的个数为偶数,并且
个数>=1,<=100000; 每个数字>=1,<=100000;
输出描述
这个数字集合的最小大小
样例
输入:
1,1,1,1,3,3,3,6,6,8
输出:
2
说明:
选择集合{1,8},销毁后的结果数组为[3,3,3,6,6],长度为5,长度为原数组的一半。
大小为 2 的可行集合还有{1,3},{1,6},{3,6}。
选择{6,8}集合是不可行的,它销后的结果数组为[1,1,1,1,3,3,3],新数组长度大于原数组的二分之一。
输入:
2,2,2,2
输出:
1
说明:
我们只能选择集合{2},销毁后的结果数组为空。
二、算法实现(Java)
public class FindGoldBox {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextLine()) {
            int[] nums = Arrays.stream(scanner.nextLine().split(","))
                    .mapToInt(Integer::parseInt).toArray();
            System.out.println(findGoldBox(nums));
        }
    }

    public static int findGoldBox(int[] nums) {
        // 排序
        Arrays.sort(nums);
        // 对原数组进行计数统计
        List<Integer> countList = new ArrayList<>();
        int cnt = 1;
        for (int i = 1; i <= nums.length - 1; i++) {
            if (nums[i] == nums[i - 1]) {
                cnt++;
            } else {
                countList.add(cnt);
                cnt = 1;
            }
        }
        countList.add(cnt);
        // 对countList数组排序,从计数多的数开始删
        Integer[] countArray = countList.toArray(new Integer[0]);
        Arrays.sort(countArray, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        int tmp = 0;
        int m = countArray.length;
        for (int i = 0; i < m; i++) {
            tmp += countArray[i];
            // 选择集合数字删除后跟原数组长度除以2比较
            if (tmp >= nums.length / 2) {
                return i + 1;
            }
        }
        return 0;
    }
}
三、运行结果

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

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

相关文章

校招春招,在线测评一般测试哪些内容?

在校园招聘这一块&#xff0c;很多应届毕业生会相当在乎&#xff0c;对于他们来说&#xff0c;如果在学校期间就找到工作是比较轻松的事情&#xff0c;不用担心毕业之后找工作困难重重&#xff0c;可以稳稳当当毕业。但想要迅速通过招聘也不容易&#xff0c;在校招春招上面&…

2024美赛C题参考论文更新+完整数据集+配套代码

2024美赛C题 &#xff08;文末获取完整版&#xff09; 首先&#xff0c;我们需要对缺失的speed_mph进行插补。缺失值处理是数据预处理的重要环节之一。可以采用均值、中位数或者根据其他相关特征进行预测的方法来填补缺失值。在这里&#xff0c;我们可以考虑使用其他相关的特征…

[C++]类和对象(中)

一:类的六个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。空类中并不是什么都没有&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生成的成员函数称为…

Multi-bit的实现方法和应用 (下)

书接上回&#xff0c;Multi-bit的实现方法和应用 &#xff08;上&#xff09;&#xff0c;闲言少叙&#xff0c;ICer GO&#xff01; In-place MBFF实现 相较于仅基于逻辑连接的MBFF封装&#xff0c;如果考虑到布局的实际情况&#xff0c;那么就有physical aware的in-place的M…

导出pdf 加密、加水印、加页脚

1.依赖 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency> <dependency> …

前端开发之deepmerge的使用和示例(对象的深度合并)

前端开发之deepmerge的使用和示例 前言使用场景链接效果图vue中简单案例1、安装插件2、示例结果前言 在平时的项目中经常会涉及到对象除了第一层以及下层进行深度合并,本问讲解的是深度合并的插件deepmerge,使用此插件避免通过递归实现一些深度合并所带来的问题 使用场景 …

Django的web框架Django Rest_Framework精讲(二)

文章目录 1.自定义校验功能&#xff08;1&#xff09;validators&#xff08;2&#xff09;局部钩子&#xff1a;单字段校验&#xff08;3&#xff09;全局钩子&#xff1a;多字段校验 2.raise_exception 参数3.context参数4.反序列化校验后保存&#xff0c;新增和更新数据&…

基于SpringBoot Vue超市管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

爱快安装和双宽带叠加

文章目录 一、爱快安装二、爱快使用1. 配置WAN12. 配置WAN23. 配置LAN14. 配置DHCP5. DNS设置6. 多线负载7. 基础设置 三、通过交换机拨号1. 交换机设置2. 配置WAN1 一、爱快安装 &#xff08;1&#xff09;下载爱快路由ISO版本 爱快路由系统下载 &#xff08;2&#xff09;IS…

MH-ET LIVE Boards(ATTiny88)实验一---点亮板载灯

MH-ET LIVE Boards(ATTiny88&#xff09;实验一点亮板载灯 在Arduino IDE中添加开发板资源包加入开发板json添加开发板 安装开发板驱动方法一&#xff1a;github下载2.0a4.rar方法二&#xff1a;开发板的package包中自带的2.0a4.rar安装驱动确认安装成功 blink.ino程序测试![在…

Vulnhub靶机:hacksudo1

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;hacksudo1&#xff08;10.0.2.43&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/hac…

Python武器库开发-武器库篇之zip文件暴力破解(五十一)

Python武器库开发-武器库篇之zip文件暴力破解(五十一) Zip文件是一种常用的存档文件格式&#xff0c;用于将多个文件和文件夹压缩成一个单独的文件。它是一种广泛接受和支持的文件格式&#xff0c;几乎所有操作系统和计算机都能够处理Zip文件。Zip文件使用一种压缩算法来减小文…

状态流支持的状态和转换操作类型

状态操作类型 States 可以有不同的操作类型&#xff0c;包含了entry, during, exit, bind, and, on event_name 操作。状态的操作使用以下通用格式的标签表示法分配给操作类型&#xff1a; name/ entry:进入操作 during:在操作期间 exit:退出操作 bind:数据名, 事件名 on even…

使用wda框架实现IOS自动化测试详解

目录 1、weditor元素定位工具 1.1、weditor的安装和使用 2、wda iOS自动化框架 2.1、wda概述 2.2、wda安装 2.3、wda的使用 2.3.1、全局配置 2.3.2、创建客户端 2.3.3、APP相关操作 1、启动APP 2、关闭APP 3、获取APP状态信息 4、获取当前APP的运行信息 2.3.4、设…

Java自救手册

目录 访问地址 访问地址&#xff0c;发现不通&#xff0c;无法访问&#xff1a; 网络不通一般有两种情况&#xff1a; Maven 拿Maven 拿到Maven以后 Maven单独的报红 Git git注意&#xff1a; 目录 访问地址 访问地址&#xff0c;发现不通&#xff0c;无法访问&…

Python中with管理上下文

上下文管理器 上下文管理器本质就是能够支持with操作。 任何实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器&#xff0c;上下文管理器对象可以使用 with 关键字。显然&#xff0c;文件&#xff08;file&#xff09;对象也实现了上下文管理器协议。 实现…

Canal 结合 SpringBoot 源码梳理

1、canal是什么&#xff0c;可以用来作什么 canal是阿里开源的一个用于监听数据库binlog&#xff0c;从而实现数据同步的工具。 2、安装 我使用的是1.1.5版本&#xff0c;太高的版本需要的jdk版本和mysql的驱动版本会更高&#xff0c;可以根据自己的环境选择。 如果是自己玩的话…

24.云原生之ArgoCD钩子

云原生专栏大纲 文章目录 Argo CD钩子如何定义钩子钩子删除策略 Argo CD钩子 Argo CD 是一个用于部署和管理 Kubernetes 应用程序的工具&#xff0c;它提供了一种声明式的方式来定义和自动化应用程序的部署过程。Argo CD 钩子&#xff08;Hooks&#xff09;是一种机制&#x…

MySQL-- if()函数 简单明了

if 主要有&#xff1a;IF函数嵌套和IF聚合函数 两类&#xff0c;主要是用来根据条件返回不同值。 基本语法为; IF(条件表达式,值1,值2)如果条件表达式为True&#xff0c;返回值1&#xff0c;为False,返回值2.返回值可以是任何值&#xff0c;比如&#xff1a;数值&#xff0c;…

消息中间件之RocketMQ源码分析(五)

消费进度保存机制 消费者启动时会同时启动位点管理器&#xff0c;RocketMQ设计了远程位点管理和本地位点管理 两种位点管理方式. 集群消费时&#xff0c;位点由客户端提交给Broker保存. 广播消费时&#xff0c;位点保存在消费者本地磁盘上 OffsetStore接口核心方法 void load(…