华为OD机试真题B卷 Java 实现【计算礼品发放的最小分组数目】,附详细解题思路

news2024/11/27 16:47:29

在这里插入图片描述

一、题目描述

又到了一年的末尾,项目组让小明负责新年晚会的小礼品发放工作。

为使得参加晚会的同时所获得的小礼品价值相对平衡,需要把小礼品根据价格进行分组,但每组最多只能包括两件小礼品,并且每个分组的价格总和不能超过一个价格上限。

为了保证发放小礼品的效率,小明需要找到分组数目最少的方案。

你的任务是写一个程序,找出分组数最少的分组方案,并输出最少的分组数目。

二、输入描述

第一行数据为分组礼品价格之和的上限

第二行数据为每个小礼品的价格,按照空格隔开,每个礼品价格不超过分组价格和的上限。

10
5 5 10 2 7

三、输出描述

输出最小分组数量。

3

四、解题思路

  1. 从输入中读取分组礼品价格之和的上限max;
  2. 从输入中读取每个小礼品的价格,并将其存储在数组arr中;
  3. 对数组arr进行排序,以便从最小的价格开始进行分组;
  4. 初始化变量num为0,表示分组数目;
  5. 使用双指针法,一个指针i指向数组的起始位置,一个指针j指向数组的末尾位置;
  6. 当j大于等于i时,进行以下判断:
    • 如果i和j指向同一个位置,表示剩下最后一个礼品,将其视为一个独立的分组,将num加1;
    • 如果arr[j]和arr[i]的和不超过max,表示可以将这两个礼品放在一起组成一个分组,将num加1,同时将i向右移动一位,j向左移动一位;
    • 如果arr[j]和arr[i]的和超过max,表示无法将这两个礼品放在一起组成一个分组,将j向左移动一位,将num加1;
  7. 返回最终的num作为结果;

五、Java算法源码

public static void main(String[] args) {
   Scanner scanner = new Scanner(System.in);
    String line = scanner.nextLine();
    int max = Integer.parseInt(line);
    String[] s = scanner.nextLine().split(" ");
    int[] arr = new int[s.length];
    for (int i = 0; i < s.length; i++) {
        arr[i] = Integer.parseInt(s[i]);
    }
    Arrays.sort(arr);
    System.out.println(get(max, arr));
}

public static int get(int max, int[] arr) {
    int num = 0;
    int i = 0;
    int j = arr.length - 1;
    while (j >= i) {
        if (Integer.valueOf(i).equals(j)) {
            num++;
            break;
        }
        if (arr[j] + arr[i] <= max) {
            num++;
            i++;
            j--;
        } else {
            j--;
            num++;
        }
    }
    return num;
}

六、效果展示

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述

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

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

相关文章

Calling Add-ins (C#)

本范例展示如何通过实现 IEdmAddIn5::GetAddInInfo 和 IEdmAddIn5::OnCmd 去创建一个当用户在数据卡中点击一个按钮时被调用的Visual C# add-in程序。这个add-in在用户浏览文件时打开一个对话框. add-in 将所选文件的路径复制到 文件的数据卡。 注意&#xff1a; 因为 SOLIDWO…

【图书推荐 | 12】前端系列

【赠书活动第十二期 】 图书推荐 本期书籍&#xff1a;前端系列 图书列表&#xff1a; Vue.js核心技术解析Nuxt.js实战Nuxt.js Web开发实战HTML5CSS 从入门到精通Flutter2 开发实例精解Electron项目开发实战 Vue.js核心技术解析 Nuxt.js实战 Nuxt.js Web开发实战 HTML5CSS 从入…

算法与数据结构基数排序

一、基数排序算法示意图 下方的基数排序算法的实现是利用“桶”来实现的&#xff0c;首先我们创建10个桶&#xff0c;然后按照基数入桶&#xff0c;基数的取值是从数字的低位到高位以此取值。我们还是以[62, 88, 58, 47, 62, 35, 73, 51, 99, 37, 93]这个序列为例&#xff0c;…

PINN学习与实验之拟合sin(x)

首先给出数学上的知识。 1. 2. 3. 其次给出PINN最基础的理解与应用说明。 1.PINN中的MLP多层感知机的作用&#xff1f; 答&#xff1a;目的是用来拟合出我们需要的那个 常微分方程&#xff0c;即函数逼近器。 2.PINN中物理信息的作用&#xff1f; 答&#xff1a;用于约束MLP反向…

安利一个我喜欢的博主(鱼皮)的项目----鱼聪明AI

大家好&#xff0c;我是鱼皮的粉丝。今天给大家介绍下他们公司的新朋友 —— 鱼聪明&#xff01; 是不是看上去就像个大聪明哈哈&#xff0c;这其实是他们公司的吉祥物。当然啦&#xff0c;她以后会经常出现在他们的产品家族和周边中~ 比如他们最新上线的 AI 助手网站 —— 鱼…

自动化测试真的会取代手工测试?说这话的人肯定不是干测试的~

在测试行业&#xff0c;一个一直被讨论的问题就是&#xff1a;手工测试没有前途&#xff0c;自动化测试会取代手工测试&#xff1f; 首先说结论&#xff1a;自动化测试不会取代手工测试&#xff0c;这完全是两个维度的事情。为什么不会呢&#xff1f;我们需要从本源上说起。 …

计算机网络期末考试学习记录

1.如果特别想把一个知识点给别人讲懂的话&#xff0c;那自己也会受益很多。 2.我是先讲给自己的&#xff0c;因为我本人也有太多疑问而不问。 3.答案是我自己做出来的&#xff0c;仅供参考。 1.路由器因目的不可达而丢弃的普通IP分组&#xff0c;会向源主机发送(C)报文来报告…

【每日挠头算法(4)】字符串相加|字符串相乘

欢迎~ 一、字符串相加思路&#xff1a;模拟竖式加法具体代码如下&#xff1a; 二、字符串相乘思路&#xff1a;模拟竖式乘法具体代码如下: 总结 一、字符串相加 点我直达~ 思路&#xff1a;模拟竖式加法 1.将两个字符串从右往左开始进行相加&#xff0c;使用一个变量ans表示进…

关于枚举常量手误带来的错误

前言 记录2020年5月30日&#xff0c;肯哥在群里面分享的一个因为手误带来的bug。 问题描述 肯哥原话&#xff1a; 又到了每天的open话题讨论时刻&#xff0c;一起在摸鱼中学点东西&#xff0c;今天我们来聊一个话题&#xff1a;一不小心的手误&#xff0c;代码有时能跑&#xf…

Python集合学习笔记

列表、字典、集合都是可变类型的序列. 集合是没有value的字典s {2, 3, 4, 5, 5, 5, 5, 6, 7, 7} print(s) # {2, 3, 4, 5, 6, 7} 集合中没有相同的元素&#xff0c;元素不能重复print() s1 set(range(6)) print(s1) # {0, 1, 2, 3, 4, 5} lis [2, 5, 8, 5, 8, 4, 9] s2 s…

搜索与图论(acwing算法基础)

文章目录 DFS排列数字n皇后 BFS走迷宫 拓扑序列单链表树与图的深度优先搜索模拟队列有向图的拓扑序列 bellman-ford有边数限制的最短路 spfaspfa求最短路spfa判断负环 FloydFloyd求最短路 PrimPrim算法求最小生成树 KruskalKruskal算法求最小生成树 染色法判定二分图染色法判定…

rabbitmq记录(服务器重启后,RabbitMQ用户丢失)

1.docker运行rabbitmq docker run -d --hostname my-rabbit --name myrabbit -p 15672:15672 -p 5672:5672 rabbitmq 2.进入rabbitmq容器 docker exec -it 3776394dd2b3 /bin/bash 3.开启rabbitmq可视化界面管理 rabbitmq-plugins enable rabbitmq_management 4.添加新用户…

RabbitMq-高级

参考&#xff1a;https://blog.csdn.net/dingd1234/article/details/125032383 1 TTL TTL QUEUE 声明args TTL MESSAGE postmessage中设置 区别&#xff1a;过期消息会直接删除消息&#xff0c;过期队列若配置死信队列会移到死信队列 ps&#xff1a;同时配置两个已小的为准 2…

2. Redis持久化、主从哨兵架构详解

分布式缓存技术Redis 1. Redis持久化1.1 RDB快照(snapshot)1.1.1 bgsave的写时复制(COW)机制 本文是按照自己的理解进行笔记总结&#xff0c;如有不正确的地方&#xff0c;还望大佬多多指点纠正&#xff0c;勿喷。 课程内容&#xff1a; 1、RDB、AOF及混合持久化详解 2、并行…

css基础一:说说你对CSS盒子模型的理解?

一、是什么 当对一个文档进行布局&#xff08;layout&#xff09;的时候&#xff0c;浏览器的渲染引擎会根据标准之一的 CSS 基础框盒模型&#xff08;CSS basic box model&#xff09;&#xff0c;将所有元素表示为一个个矩形的盒子&#xff08;box&#xff09; 一个盒子由四…

认识HttpServletRequest和HttpServletResponse

hi,大家好,上一期我们认识了HttpServlet,这一期我们来认识一下HttpServletRequest和HttpServletResponse &#x1f680;HttpServletRequest &#x1f49a;1.核心方法介绍 &#x1f49a;2.代码举例展示 &#x1f680;HttpServletResponse &#x1f49a;1.核心方法展示 &a…

STC12读取内部ID方法介绍

STC12读取内部ID方法介绍 &#x1f516;这里以STC12LE5A60S2为例&#xff0c;从STC12手册的第一章&#xff0c;1.10小结可以找到相关的ID相关的信息。这个信息主要是用于程序加密或产品销售管理等方面。&#x1f33f;STC12LE5A60S2系统板&#xff1a; https://oshwhub.com/pers…

javaScript蓝桥杯----阅读吧

目录 一、介绍二、准备三、目标四、代码五、完成 一、介绍 “读万卷书&#xff0c;行万里路”&#xff0c;无论你现在贫穷或富有&#xff0c;身和心一定要有一个在路上。那么&#xff0c;在快节奏的今天&#xff0c;人们是如何利用碎片化的时间去阅读的呢&#xff1f;没错&…

【MySQL高级篇笔记-事务基础知识(中) 】

此笔记为尚硅谷MySQL高级篇部分内容 目录 一、数据库事务概述 1、存储引擎支持情况 2、基本概念 3、事务的ACID特性 1.原子性&#xff08;atomicity&#xff09; 2.一致性&#xff08;consistency&#xff09; 3.隔离型&#xff08;isolation&#xff09; 4.持久性&a…

卷积编码和维特比译码

文章目录 卷积编码维特比译码 卷积编码 卷积码是一种非分组码&#xff0c;通常适用于前向纠错。在分组码中&#xff0c;编码器产生的 n 个码元的一个码组&#xff0c;完全决定于这段时间中 k 比特输入信息。这个码组中的监督位仅监督本码组中 k 个信息位。卷积码在编码时虽然也…