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

这篇具有很好参考价值的文章主要介绍了华为OD机试之阿里巴巴找黄金宝箱(II)(Java源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

阿里巴巴找黄金宝箱(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,5 2 当集合内数字为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);
	}
}

代码运行截图

华为OD机试之阿里巴巴找黄金宝箱(II)(Java源码)文章来源地址https://www.toymoban.com/news/detail-491973.html

到了这里,关于华为OD机试之阿里巴巴找黄金宝箱(II)(Java源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 华为OD机试 - 阿里巴巴找黄金宝箱(I)(Java & JS & Python)

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字,箱子中可能有一个黄金宝箱。 黄金宝箱满足排在它之前的所有箱子数字和等于排在它之后的所有箱子数字之和; 第一个箱子左边部

    2024年02月14日
    浏览(43)
  • 华为OD机试 - 阿里巴巴找黄金宝箱(III) (Java & JS & Python)

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0-N的箱子,每个箱子上面贴有一个数字。 阿里巴巴念出一个咒语数字,查看宝箱是否存在两个不同箱子,这两个箱子上贴的数字相同,同时这两个箱了的编号之差的绝对值

    2024年02月14日
    浏览(28)
  • 【华为OD机试python】阿里巴巴找黄金宝箱(IV)【2023 B卷|200分】

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地, 藏宝地有编号从0-N的箱子,每个箱子上面有一个数字,箱子排列成一个环, 编号最大的箱子的下一个是编号为0的箱子。 请输出每个箱子贴的数字之后的第一个比它大的数,如果不存在则

    2024年02月10日
    浏览(28)
  • 【华为OD机试python】阿里巴巴找黄金宝箱(V)【2023 B卷|100分】

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地, 藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字。 阿里巴巴念出一个咒语数字k(kN),找出连续k个宝箱数字和的最大值, 并输出该最大值。 输入描述 第一行输入一个数字字串,数字

    2024年02月10日
    浏览(36)
  • 【华为OD机试真题2023B卷 JAVA&JS】阿里巴巴找黄金宝箱(V)

    知识点数组哈希表滑窗  时间限制:1s 空间限制:256MB 限定语言:不限 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字。 阿里巴巴念出一个咒语数字k(kN),找出连续k个宝箱数字和的最大值,

    2024年02月06日
    浏览(36)
  • 【满分】【华为OD机试真题2023B卷 JAVA&JS】阿里巴巴找黄金宝箱(I)

    知识点数组前缀和整数范围  时间限制:1s 空间限制:256MB 限定语言:不限 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字,箱子中可能有一个黄金宝箱。 黄金宝箱满足排在它之前的所有箱

    2024年02月16日
    浏览(25)
  • 华为OD机考算法题:阿里巴巴找黄金宝箱(1)

    题目 阿里巴巴找黄金宝箱(1) 难度 易 题目说明 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从 0 ~ N 的箱子,每个箱子上面贴有一个数字,箱子中可能有一个黄金宝箱。 黄金宝箱满足排在它之前的所有箱子数字和等于排在它之

    2024年02月07日
    浏览(32)
  • 华为od统一考试B卷【阿里巴巴找黄金宝箱】Java 实现

             所有题目均有五种语言实现。 C实现目录 、 C++ 实现目录 、 Python实现目录 、 Java实现目录 、 JavaScript实现目录 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字,箱子中可能有一

    2024年02月13日
    浏览(27)
  • 华为od统一考试B卷【阿里巴巴找黄金宝箱(V)】Python 实现

             所有题目均有五种语言实现。 C实现目录 、 C++ 实现目录 、 Python实现目录 、 Java实现目录 、 JavaScript实现目录 贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0-N的箱子,每个箱子上面贴有一个数字. 阿里巴巴念出一个咒

    2024年02月09日
    浏览(32)
  • 华为OD机考B卷 | 100分】阿里巴巴找黄金宝箱(JAVA题解——也许是全网最详)

    本人是算法小白,甚至也没有做过Leetcode。所以,我相信【同为菜鸡的我更能理解作为菜鸡的你们的痛点】。 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字,箱子中可能有一个黄金宝箱。黄

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包