华为OD机试之阿里巴巴找黄金宝箱(II)(Java源码)

news2024/10/7 16:15:21

阿里巴巴找黄金宝箱(II)

题目描述
一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~n 的箱子,每个箱子上面贴有箱子中藏有金币的数量。
从金币数量中选出一个数字集合,并销毁贴有这些数字的每个箱子,如果能销毁一半及以上的箱子,则返回这个数字集合的最小大小。

输入描述
一个数字字串,数字之间使用逗号分陌,例如: 6,6,6,6,3,3,3,1,1,5字串中数字的个数为偶数,并且个数>=1,<=100000:;每个数字>=1,<=100000;

输出描述
这个数字集合的最小大小,例如: 2

输入输出说明
6,6,6,6,3,3,3,1,1,52当集合内数字为6和3 时,可以销毁掉7个箱子,占一半以上了

解析

  1. 理解题意,这个题就是为了让你找一个集合,这个集合中每个数字出现次数之和占集合一半及以上。不可使用for循环,因为不知道会出现几个数字才能满足条件。看似简单,实则对于算法基础稍微差一些的人来说,可能会有点难搞。
  2. 这个题还是使用数位DP算法最为简单,不懂的可以参考我的博客 【算法】使用数位算法生成0至某个数之间的整数(for循环之外的另一种实现方式,蛮长见识的)
  3. 本示例采用map和List集合的方式进行解题。
    3.1 将每个数字及其出现的次数存入List,对该List进行排序。出现的次数越多,越靠前。因为需要集合的大小最小,所以只有可能集合中的数字出现最多,才有可能最小。
    3.2 遍历这个数组,从前往后依次取集合的键和值,做求和判断运算即可找出结果

示例代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class T64 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		List<Integer> keyList = new ArrayList<>();
		Arrays.stream(input.split(",")).forEach(item -> {
			Integer key = Integer.parseInt(item);
			if (map.containsKey(key)) {
				map.put(key, map.get(key) + 1);
			} else {
				map.put(key, 1);
				keyList.add(key);
			}
		});
		int len = input.split(",").length;
		List<Map<Integer, Integer>> mapList = new ArrayList<>();
		for (Integer key1 : keyList) {
			Map<Integer, Integer> m = new HashMap<>();
			m.put(key1, map.get(key1));
			mapList.add(m);
		}
		mapList.sort(new Comparator<Map<Integer, Integer>>() {
			@Override
			public int compare(Map<Integer, Integer> o1, Map<Integer, Integer> o2) {
				Integer v1 = o1.get(o1.keySet().iterator().next());
				Integer v2 = o2.get(o2.keySet().iterator().next());
				if (v1 > v2)
					return -1;
				if (v1 < v2)
					return 1;
				return 0;
			}
		});
		int count = 0;
		int tempLen = 0;
		// System.out.println(mapList);
		while (tempLen < len / 2) {
			// System.out.println(mapList.get(count));
			tempLen += mapList.get(count).get(mapList.get(count).keySet().iterator().next());
			count++;
		}
		System.out.println(count);
	}
}

代码运行截图

在这里插入图片描述

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

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

相关文章

Visual ChatGPT原理解读——大模型论文阅读笔记四

论文&#xff1a;https://arxiv.org/abs/2303.04671 代码&#xff1a;https://github.com/microsoft/TaskMatrix 一. 整体框架 如图所示&#xff0c;用户上传一张黄花的图像并输入一个复杂的语言指令“请根据该图像的预测深度生成一朵红花&#xff0c;然后逐步使其像卡通一样”…

go-zero学习 第一章 基础

go-zero学习 第一章 基础 重要提示1 相关命令2 参考文档3 架构图4 go-zero环境搭建4.1 注意事项4.2 go-zero 需要安装的组件4.3 自动安装4.4 手动安装 5 单体服务5.1 简单入门5.2 api语法5.3 api 文件格式化 6 微服务6.1 简单入门6.2 proto 语法 7 目录结构介绍 重要提示 因官…

spring boot绮梦餐饮系统-计算机毕设 附源码88672

spring boot绮梦餐饮系统 目录 毕业设计 摘 要 Abstract 第1章 前 言 1.1 研究背景 1.2 研究现状 1.3 系统开发目标 第2章 系统开发环境 2.1 J2EE技术 2.2 Spring boot框架 2.3 MySQL数据库 2.4 B/S结构 2.5 JavaScript 运行模式 1.1是一种解释性脚本语言&…

Segment Anything Model(SAM)如何促进医学图像分割

文章目录 How Segment Anything Model (SAM) Boost Medical Image Segmentation?摘要segment anything modelHow SAM performs on Medical Image Segmentation?Pathology Image SegmentationLiver Tumor Segmentation from CECTPolyps Segmentation from Colonoscopy ImagesB…

Win10 hyper-v与vmware不兼容解决方案

Win10 hyper-v与vmware不兼容怎么办 一、异常1.1 异常描述 - V M w a r e W o r k s t a t i o n 与 H y p e r − V 不兼容 \color{red}{VMware Workstation 与 Hyper-V 不兼容} VMwareWorkstation与Hyper−V不兼容1.2 异常原因 二、解决办法2.1 关闭Hyper-V启动2.2 关闭内核…

【面试题】6月 vue核心面试题汇总

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 一、MVVM原理 在Vue2官方文档中没有找到Vue是MVVM的直接证据&#xff0c;但文档有提到&am…

判断数组中的每个元素是否为NaN numpy.isnan()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断数组中的每个元素是否为NaN numpy.isnan() [太阳]选择题 请问关于以下代码的最后输出正确的是&#xff1f; import numpy as np a np.array([1, np.nan, np.inf, float(nan)]) print(&…

PSD矢量处理:Graphics Mill 11.1.18 Crack

光栅和矢量处理 .NET SDK 图形铣床 11 图PSD矢量处理:Graphics Mill 11.1.18可供 .NET 和 ASP.NET 开发人员使用的最可靠的映像工具集。它允许用户轻松地向 .NET 应用添加复杂的光栅和矢量图像处理功能。 光栅图形 加载并保存 JPEG、PNG 和另外 8 种图像格式 调整大小&#xff…

SignalR服务主动发送消息给客户端

文章目录 背景尝试方案使用IHubContext上下文进行处理第一步 创建一个类用于处理上下文&#xff08;WarningBroadcast&#xff09;第二步&#xff1a;如何实例化这个对象呢下面是我实现的方式 第三步&#xff1a;使用扩展类 调用通知关于MessageBus的使用demo发布消息订阅消息 …

java 心理教育网站系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 心理教育网站系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

使用 Flask 的g对象和 MySQL 实现用户登录和注销功能

在Flask中&#xff0c;g对象是一个特殊类型的对象&#xff0c;被称为"上下文全局变量"。它在一次请求的生命周期内存储信息&#xff0c;并且可以在整个请求过程中访问和共享。 g对象对于存储用户登录信息非常有用。例如&#xff0c;当用户通过验证登录时&#xff0c…

编译程序的任务

编译程序是一种翻译程序&#xff0c;编译程序是将一种语言形式翻译成另一种语言形式。它将高级语言所写的源程序翻译成等价的机器语言或汇编语言的目标程序。 整个编译过程一般可以划分为 5 个阶段&#xff1a;词法分析、语法分析、语义分析及中间代码生成、中间代码优化和目标…

UOS系统VMware安装教程

官网链接 https://home.uniontech.com/ 从这里下镜像文件 内存最好4以上 选择ISO文件地址 选择自定义安装 手动分区 4个g给交换分区&#xff0c;剩下的全挂在根目录下

长视频自动化摘要笔记完整工作流;腾讯云发布AIGC全链路内容安全解决方案

&#x1f989; AI新闻 &#x1f680; 腾讯云发布AIGC全链路内容安全解决方案&#xff0c;助力企业护航生成式人工智能健康发展 摘要&#xff1a;腾讯云公布MaaS能力全景图&#xff0c;提供AIGC全链路内容安全解决方案&#xff0c;覆盖从模型训练到内容生成再到事后运营全过程…

【工程应用八】终极的基于形状匹配方案解决(小模型+预生成模型+无效边缘去除+多尺度+各项异性+最小组件尺寸)

我估摸着这个应该是关于形状匹配或者模版匹配的最后一篇文章了&#xff0c;其实大概是2个多月前这些东西都已经弄完了&#xff0c;只是一直静不下来心整理文章&#xff0c;提醒一点&#xff0c;这篇文章后续可能会有多次修改&#xff08;但不会重新发文章&#xff0c;而是在后台…

搭建GPU环境的TensorFlow并将单块GPU划分逻辑为分区的实践

1、搭建环境 1.1、查看GPU版本 在安装tensorflow的GPU版本之前可以先看下自己的显卡情况 命令&#xff1a;nvidia-smi 或者桌面右下角&#xff0c;NVIDIA图标&#xff0c;进入到NVIDIA的控制面板&#xff1a; 点击左下角的系统信息&#xff0c;组件中查看NVCUDA64.dll的版本…

英特尔淡化混合 CPU-GPU 引擎,将 NNP 合并到 GPU 中

早在 2022 年 2 月&#xff0c;当英特尔宣布其“Falcon Shores”项目以构建混合 CPU-GPU 计算引擎时&#xff0c;该项目允许在单个插槽中独立扩展 CPU 和 GPU 容量&#xff0c;看起来这家芯片制造商正准备与竞争对手 Nvidia 较量AMD 开始使用混合计算电机&#xff0c;Intel 称之…

基于Flask框架和Vue框架搭建一个Web端的深度学习检测系统(从模型训练,界面设计到服务器部署实现一个完整项目实战)

从Pytorch框架下YOLOv5的模型训练&#xff0c;到Flask框架的模型加载&#xff0c;再到Vue框架的界面设计到最后的服务器部署。 实验环境 1.Windows10系统 2.编辑器pycharm 3.GPU 1080Ti 4.anaconda虚拟环境安装相应的安装包 5.pytorch版本1.7.1 6.Python3.7.15 实验数据集 …

C++初阶—stackqueue

目录 1. stack的介绍和使用 1.1 stack的介绍 1.2 stack使用及OJ 1.2.1 最小栈 1.2.2 栈的弹出压入顺序 1.2.3 逆波兰表达式求值 1.2.4 用两个栈实现一个队列 2. queue的介绍和使用 2.1 queue的介绍 2.2 queue的使用及OJ 2.2.1 用队列实现栈 2.3 queue的模拟实现 3…

用户测试:确保产品质量的关键一环

用户测试&#xff1a;确保产品质量的关键一环 在当今竞争激烈的市场中&#xff0c;产品的质量是企业脱颖而出的关键因素之一。为了确保产品的质量&#xff0c;用户测试成为了开发过程中不可或缺的一环。用户测试是通过让真实用户使用产品并提供反馈意见来验证产品的功能、易用性…