华为OD机试真题——求最多可以派出多少支队伍(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
2025 A卷 100分 题型
本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》
华为OD机试真题《求最多可以派出多少支队伍》:
文章快捷目录
题目描述及说明
Java
python
JavaScript
C
GO
题目名称:求最多可以派出多少支队伍
- 知识点:贪心算法、双指针、排序
- 时间限制:1秒
- 空间限制:256MB
- 限定语言:不限
题目描述
用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N。每个团队可以由1人或2人组成,且1个人只能参加1个团队。请计算出最多可以派出多少支符合要求的团队?
输入描述:
- 第一行为总人数,范围[1,500000]。
- 第二行为每个人的能力值数组,元素取值范围[1,500000],数组大小与总人数一致。
- 第三行为团队要求的最低能力值N,范围[1,500000]。
输出描述:
- 最多可以派出的团队数量。
示例:
输入:
5
3 1 5 7 9
8
输出:
3
说明:
- 3和5组成一队(3+5≥8),1和7组成一队(1+7≥8),9单独一队(9≥8),共3队。
Java
问题分析
我们需要从一组人中选出尽可能多的团队,每个团队可以由1人或2人组成,且能力值之和需达到最低要求N。目标是找到最大的团队数量。
解题思路
- 排序数组:将能力值从小到大排序,便于双指针操作。
- 贪心策略:使用双指针,优先让能力大的人单独成队,若不能则尝试与能力小的人组队。
- 双指针操作:
- 右指针从最大能力开始,若单独满足要求则成队。
- 否则尝试与左指针的人组队,若满足则成队,否则左移找更小能力的人。
代码实现
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int total = scanner.nextInt();int[] abilities = new int[total];for (int i = 0; i < total; i++) {abilities[i] = scanner.nextInt();}int N = scanner.nextInt();Arrays.sort(abilities); // 将能力值排序,便于双指针操作int left = 0; // 左指针,指向当前最小未处理的能力值int right = total - 1; // 右指针,指向当前最大未处理的能力值int count = 0; // 统计符合要求的团队数量while (left <= right) { // 当还有人未处理时循环if (abilities[right] >= N) { // 右指针的人能力值达标,单独成队count++;right--; // 处理下一个更大的能力值(指针左移)} else { // 右指针的人无法单独成队,尝试与左指针的人组队if (left < right && abilities[left] + abilities[right] >= N) { // 左右指针不同且组合达标count++;left++; // 左指针右移,处理下一个更小的能力值right--; // 右指针左移,处理下一个更大的能力值} else { // 无法组队,左指针右移(当前右指针的人无法配对,只能放弃)left++;}}}System.out.println(count);}
}
代码详解
- 输入处理:读取总人数、能力数组和最低要求N。
- 排序:将数组排序,便于双指针从两端向中间处理。
- 双指针初始化:
left
指向最小元素,right
指向最大元素。 - 循环处理:
- 右指针单独成队:若当前右指针的人能力≥N,直接成队。
- 尝试组队:若左右指针非同一人且能力之和≥N,组队。
- 无法处理:左指针右移,放弃当前右指针的人。
- 输出结果:统计所有可能的队伍数量。
示例测试
-
示例输入1:
5 3 1 5 7 9 8
输出:3
说明:3和5组队,1和7组队,9单独成队。 -
示例输入2:
2 4 5 8
输出:1
说明:4和5组队。 -
示例输入3:
3 3 3 3 5
输出:1
说明:其中两人组队(3+3≥5),剩下一人无法成队。
综合分析
- 时间复杂度:O(n log n),排序耗时O(n log n),双指针遍历O(n)。
- 空间复杂度:O(1),仅使用常量额外空间。
- 正确性:
- 贪心策略确保每次尽可能组成最多的队伍。
- 排序和双指针处理所有可能的组合。
- 适用性:
- 处理大规模数据高效(如50万人)。
- 逻辑清晰,避免复杂递归或动态规划。
- 为何最优:
- 贪心策略优先处理能力大的人,最大化利用高能力值。
- 双指针保证线性时间复杂度,避免重复计算。
python
问题分析
我们需要从一组人中选出尽可能多的团队,每个团队可以由1人或2人组成,且能力值之和需达到最低要求N。目标是找到最大的团队数量。
解题思路
- 排序数组:将能力值从小到大排序,便于双指针操作。
- 贪心策略:使用双指针,优先让能力大的人单独成队,若不能则尝试与能力小的人组队。
- 双指针操作:
- 右指针从最大能力开始,若单独满足要求则成队。
- 否则尝试与左指针的人组队,若满足则成队,否则左移找更小能力的人。
代码实现
def max_teams():import sys# 读取输入数据total = int(sys.stdin.readline()) # 总人数abilities = list(map(int, sys.stdin.readline().split())) # 能力数组N = int(sys.stdin.readline()) # 团队最低能力要求# 将能力数组从小到大排序(排序后:左指针指向最小,右指针指向最大)abilities.sort()left = 0 # 左指针初始指向最小值right = total - 1 # 右指针初始指向最大值count = 0 # 统计符合要求的团队数量# 双指针贪心算法while left <= right:# 如果当前右指针的人能力值 >= N,单独成队if abilities[right] >= N:count += 1right -= 1 # 处理下一个更大的能力值(右指针左移)else:# 尝试与左指针的人组队if left < right and (abilities[left] + abilities[right] >= N):count += 1left += 1 # 左指针右移(处理更小的能力值)right -= 1 # 右指针左移(处理更大的能力值)else:# 无法组队,丢弃当前左指针的人(因为它无法与任何更大的值组队)left += 1print(count)# 示例测试
if __name__ ==
相关文章:

华为OD机试真题——求最多可以派出多少支队伍(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…...

《软件工程》第 12 章 - 软件测试
软件测试是确保软件质量的关键环节,它通过执行程序来发现错误,验证软件是否满足需求。本章将依据目录,结合 Java 代码示例、可视化图表,深入讲解软件测试的概念、过程、方法及实践。 12.1 软件测试的概念 12.1.1 软件测试的任务 …...

消息队列-kafka为例
目录 消息队列应用场景和基础知识MQ常见的应用场景MQ消息队列的两种消息模式如何保证消息队列的高可用?如何保证消息不丢失?如何保证消息不被重复消费?如何保证消息消费的幂等性?重复消费的原因解决方案 如何保证消息被消费的顺序…...

学习STC51单片机20(芯片为STC89C52RCRC)
每日一言 生活不会一帆风顺,但你的勇敢能让风浪变成风景。 串口助手的界面就等于是pc端的页面设置的是pc端的波特率等等参数 程序里面的是单片机的波特率等等参数 串口助手是 PC 端软件 串口助手(如 STC-ISP)是运行在 PC 上的工具&#x…...

链路追踪神器zipkin安装详细教程教程
今天分享下zipkin的详细安装教程,具体代码demo可以参考我上篇文章:Spring Cloud Sleuth与Zipkin深度整合指南:微服务链路追踪实战-CSDN博客 一、Zipkin是什么? Zipkin是由Twitter开源的一款分布式追踪系统(现由OpenZ…...
RabbitMQ备份与恢复技术详解:策略、工具与最佳实践
RabbitMQ作为广泛使用的消息中间件,其高可用性和数据持久化能力使其成为分布式系统的核心组件。然而,硬件故障、人为误操作或灾难性事件仍可能导致数据丢失或服务中断。因此,建立可靠的备份与恢复机制是运维工作的关键环节。本文基于RabbitMQ…...

bug: uniCloud 查询数组字段失败
问题根源:使用了支付宝云 官方说:2024年11月之后创建的新的支付宝云空间,数组字段查询强制必须设置 array 类型的索引 布尔类型的查询,强制必须设置 bool 类型的索引。 方案一:找到云服务空间-》云数据库-》对应的表-…...
Php JIT 使用详解
简介 PHP 8 引入的 JIT(Just-In-Time 编译器) 是该版本的一个重要性能特性,首次让 PHP 有了运行时即时编译的能力,从解释型语言迈向了“编译执行”的方向。 什么是 JIT? JIT 是 即时编译(Just-In-Time c…...

视觉分析开发范例:Puppeteer截图+计算机视觉动态定位
一、选型背景:传统爬虫已无力应对的视觉挑战 在现代互联网环境中,尤其是小红书、抖音、B站等视觉驱动型平台,传统基于 HTML 的爬虫已经难以满足精准数据采集需求: 内容加载由 JS 动态触发,难以直接解析 HTML…...

Linux 基础开发工具的使用
目录 前言 一:下载工具yum 二:文本编辑器vim 1. 命令模式 2. 插入模式 3. 底行模式 三:gcc和g 基本使用格式 常用选项及作用 编译过程示例 四、Linux 项目自动化构建工具 ——make/Makefile 1. make 与 Makefile 的关系 2. Make…...
ElasticSearch查询指定时间内出现的次数/2秒内出现的次数
查询指定时间内出现的次数 POST process-log/_search {"size": 0,"query": {"bool": {"filter": [{"range": {"requestTime": {"from": 1722470400000,"to": 1722556800000}}}]}},"agg…...

华为云Flexus+DeepSeek征文 | Dify-LLM平台一键部署教程及问题解决指南
作者简介 我是摘星,一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型,将实际使用经验分享给大家,希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 1. 前言 2. 准备工作 2.1 注册华为云账号 2.2 确…...
STP协议:如何消除网络环路风暴
生成树协议(STP,Spanning Tree Protocol)的主要功能: 消除网络环路导致的广播风暴问题(环路会引发MAC地址表不稳定)防止网络中的主机接收重复数据帧 STP工作原理: 选举根桥(Root …...

哈工大计算机系统2025大作业——Hello的程序人生
计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算学部 学 号 2023113072 班 级 23L0513 学 生 董国帅 指 导 教 师 史先俊 计算机科学与…...
物联网常用协议Modbus、CAN、BACnet介绍
一、Modbus Modbus 作为工业通信领域的基石,是一款被广泛应用的工业通信协议,主要用于实现可编程逻辑控制器(PLC)等工业电子设备之间的连接。1979 年,Modicon 公司(现施耐德电气的一部分)开发了这一协议,旨在简化工厂内设备间的通信流程。经过多年发展,Modbus 衍生出…...

Vue中van-stepper与input值不同步问题及解决方案
一、问题描述 在使用Vant UI的van-stepper步进器组件与原生input输入框绑定同一响应式数据时,出现以下现象: 通过步进器修改值后,页面直接输出{{ count }}和watch监听器均能获取最新值但input输入框显示的数值未同步更新,仍为旧…...

react基础技术栈
react基础技术栈 react项目构建react的事件绑定React组件的响应式数据条件渲染和列表循环表单绑定 Props和组件间传值,插槽react中的样式操作 生命周期ref 和 context函数组件和hook高阶组件React性能问题React-route的三个版本react-router使用步骤react-router提供…...

Three.js搭建小米SU7三维汽车实战(4)场景搭建
场地搭建 javascript // 导入threejs import * as THREE from "three"; // 导入轨道控制器 import { OrbitControls } from "three/addons/controls/OrbitControls.js"; // 1. 创建场景 const scene new THREE.Scene(); // 2. 创建相机 const camera ne…...
redis五种数据结构底层实现
参考文档: redis5种数据结构底层实现...

Excel 统计某个字符串在指定区域出现的次数
【本文概要】 Excel 统计某个字符串在指定区域出现的次数: 1、Excel 统计一个单元格内的某字符串的出现次数 2、Excel 统计某一列所有单元格内的某字符串的出现次数 3、Excel 统计某一区域所有单元格内的某字符串的出现次数 1、Excel 统计一个单元格内的某字符串的出…...
【Kubernetes】ubuntu20.04通过kubeadm + Docker安装k8s
Kubernetes v1.24集群安装配置步骤总结 一、环境准备 (一)系统要求 运行兼容deb/rpm的Linux操作系统(如Ubuntu或CentOS)的计算机,1台或多台。每台机器内存2GB以上,内存不足会限制应用运行。控制平面节点…...
前端开源JavaScrip库
以下内容仍在持续完善中,如有遗漏或需要补充之处,欢迎在评论区指出。感谢支持,如果觉得有帮助,欢迎点赞鼓励。感谢支持 JavaScript 框架Vue.jsVue.js - 渐进式 JavaScript 框架 | Vue.jsReactReactAngularHome • AngularjQueryj…...

【Linux我做主】进度条小程序深度解析
Linux下C语言进度条程序深度解析 进度条小程序GitHub地址 前言前置知识回车换行(CR/LF)的深度解析历史渊源与技术规范在进度条/倒计时中的应用 缓冲区机制的全面剖析缓冲区引入缓冲类型对比进度条开发中的关键控制 进度条实现以小见大——倒计时倒计时最…...
MySQL 使用全局锁会导致的问题?
MySQL 使用全局锁会导致以下核心问题: 业务停摆与主从延迟 主库备份:备份期间所有更新操作被阻塞,业务系统陷入等待状态从库备份:无法执行主库同步的 binlog,导致主从复制延迟加剧 并发性能急剧下降 …...

从Homebrew找到openssl.cnf文件并拷贝到Go项目下使用
安装OpenSSL 在 macOS 上下载和安装 OpenSSL 最常见和推荐的方式是使用 Homebrew,这是一个 macOS 缺失的包管理器。 如果您还没有安装 Homebrew,请先安装它。安装 Homebrew 后,安装 OpenSSL 只需要一条命令。 步骤 1:安装 Home…...
在Java对象转JSON字符串时不显示无值参数
在Java中,可以通过在展示数据的逻辑中添加判断条件来实现这一需求。以下是一些常见的场景和实现方法: 场景一:在Java对象转JSON字符串时 使用Gson库 代码实现 首先引入Gson依赖,如果使用Maven构建项目,在pom.xml文件中…...
在 Ubuntu 服务器上 下载 Clash 文件使用代理
文件Clash.Verge_1.3.8_x64_portable.zip 在 Ubuntu 服务器上不能使用这个Clash 文件**,我们需要的是 Clash.Meta 而不是 Clash Verge GUI 客户端 也就是 Clash Verge GUI 客户端的 Windows 版本,是给 Windows 桌面环境用的图形界面,不适用…...

微信小程序一次性订阅封装
封装代码如下: export async function subscribeMessage(tmplIds: string[]): Promise<ISubscribeMessagePromise> {// 模板ID// 1、获取设置状态const settings (await wx.getSetting({ withSubscriptions: true })).subscriptionsSetting || {}console.log…...
Spring AI MCP的几个小问题
测试时间:2025/05/29 测试版本:Spring AI 1.0.0 问题1:由于启动顺序问题,MCP的服务器端和客户端不能在一个应用里,不然客户端连不上服务器会报错退出。(实际项目应该没有这样用的) 问题2:现在如果配置了…...

安全帽检测算法AI智能分析网关V4守护工地/矿山/工厂等多场景作业安全
一、方案概述 在工业生产与建筑施工场景中,安全帽是保障人员安全的重要装备。但传统人工巡检效率低、易疏漏,难以满足现代安全管理需求。AI智能分析网关V4安全帽检测方案,借助人工智能与计算机视觉技术,实现作业现场安全帽佩戴…...