news 2026/4/19 20:48:49

华为OD机试真题 - 最大N个数和最小N个数的和 (C++ Python JAVA JS GO)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为OD机试真题 - 最大N个数和最小N个数的和 (C++ Python JAVA JS GO)

最大N个数和最小N个数的和

华为OD机试 - 华为OD上机考试 100分题型

华为OD机试真题目录点击查看: 华为OD机试真题题库目录|机考题库 + 算法考点详解

题目描述

给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。

说明

  • 数组中数字范围[0, 1000]
  • 最大N个数与最小N个数不能有重叠,如有***重叠,输入非法***返回-1
  • 输入非法返回-1

输入描述

  • 第一行输入M, M标识数组大小
  • 第二行输入M个数,标识数组内容
  • 第三行输入N,N表达需要计算的最大、最小N个数

输出描述

输出最大N个数与最小N个数的和

用例1

输入

5 95 88 83 64 100 2

输出

342

说明

最大2个数[100,95],最小2个数[83,64], 输出为342。

用例2

输入

5 3 2 3 4 2 2

输出

-1

说明

最大2个数[4,3],最小2个数[3,2], 有重叠输出为-1。

题解

思路:逻辑分析 + 双指针

  1. 使用集合对输入数组进行去重。
  2. 将集合转换为数组,此时判断数组长度 >= 2 *n, 如果不成立则直接输出-1.因为会存在最大的数和最小的数重叠。
  3. 将数组进行升序排序,然后使用双指针计算大N个数与最小N个数的和。
  4. 输出结果。

c++

#include<iostream> #include<vector> #include<string> #include <utility> #include <sstream> #include<algorithm> #include<cmath> #include<set> using namespace std; int main() { int m,n; cin >> m; // 去重 set <int> uniqueNum; for (int i = 0; i < m; i++) { int tmp; cin >> tmp; uniqueNum.insert(tmp); } cin >> n; vector<int> nums(uniqueNum.begin(), uniqueNum.end()); int numLen = nums.size(); // 会存在重叠 if (numLen < 2 * n) { cout << -1; return 0; } // 升序 sort(nums.begin(), nums.end()); int left = 0, right = numLen -1; int sum = 0; // 它的最大N个数与最小N个数的和 while (n != 0) { sum += (nums[left] + nums[right]); left++; right--; n--; } cout << sum; return 0; }

JAVA

import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); // 去重(Set 自动去重) Set<Integer> uniqueNum = new HashSet<>(); for (int i = 0; i < m; i++) { uniqueNum.add(sc.nextInt()); } int n = sc.nextInt(); // 转为数组 List<Integer> nums = new ArrayList<>(uniqueNum); int numLen = nums.size(); // 会存在重叠 if (numLen < 2 * n) { System.out.println(-1); return; } // 升序排序 Collections.sort(nums); int left = 0, right = numLen - 1; int sum = 0; // 最大 n 个数 + 最小 n 个数 while (n != 0) { sum += nums.get(left) + nums.get(right); left++; right--; n--; } System.out.println(sum); } }

Python

importsysdefmain():data=list(map(int,sys.stdin.read().strip().split()))m=data[0]idx=1# 去重uniqueNum=set()for_inrange(m):uniqueNum.add(data[idx])idx+=1n=data[idx]nums=list(uniqueNum)numLen=len(nums)# 会存在重叠ifnumLen<2*n:print(-1)return# 升序nums.sort()left,right=0,numLen-1total=0# 最大 n 个数 + 最小 n 个数whilen>0:total+=nums[left]+nums[right]left+=1right-=1n-=1print(total)if__name__=="__main__":main()

JavaScript

constreadline=require('readline');constrl=readline.createInterface({input:process.stdin,output:process.stdout});letinput=[];rl.on('line',line=>{input.push(...line.trim().split(/\s+/));});rl.on('close',()=>{letidx=0;constm=parseInt(input[idx++],10);// 去重constuniqueSet=newSet();for(leti=0;i<m;i++){uniqueSet.add(parseInt(input[idx++],10));}constn=parseInt(input[idx],10);constnums=Array.from(uniqueSet);constnumLen=nums.length;// 会存在重叠if(numLen<2*n){console.log(-1);return;}// 升序nums.sort((a,b)=>a-b);letleft=0,right=numLen-1;letsum=0;letcnt=n;// 最大 n 个数 + 最小 n 个数while(cnt>0){sum+=nums[left]+nums[right];left++;right--;cnt--;}console.log(sum);});

Go

packagemainimport("bufio""fmt""os""sort")funcmain(){in:=bufio.NewReader(os.Stdin)varmintfmt.Fscan(in,&m)// 去重uniqueNum:=make(map[int]bool)fori:=0;i<m;i++{varxintfmt.Fscan(in,&x)uniqueNum[x]=true}varnintfmt.Fscan(in,&n)// 转为切片nums:=make([]int,0,len(uniqueNum))fork:=rangeuniqueNum{nums=append(nums,k)}numLen:=len(nums)// 会存在重叠ifnumLen<2*n{fmt.Println(-1)return}// 升序排序sort.Ints(nums)left,right:=0,numLen-1sum:=0// 最大 n 个数 + 最小 n 个数forn>0{sum+=nums[left]+nums[right]left++right--n--}fmt.Println(sum)}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 0:38:24

YOLOv8冻结骨干网络训练Head层提速方案

YOLOv8冻结骨干网络训练Head层提速方案 在工业级目标检测任务中&#xff0c;一个常见的挑战是&#xff1a;如何在有限的计算资源和小规模标注数据下&#xff0c;快速完成模型迭代并达到可用精度&#xff1f;面对这一现实问题&#xff0c;开发者往往陷入两难——从头训练耗时耗力…

作者头像 李华
网站建设 2026/4/17 22:47:12

YOLOv8损失函数分析:理解训练过程中各项指标含义

YOLOv8损失函数深度解析&#xff1a;从训练指标看模型行为 在目标检测的实际项目中&#xff0c;我们常常会遇到这样的情况&#xff1a;模型训练了几十个epoch&#xff0c;mAP提升缓慢&#xff0c;或者某一类物体总是漏检。打开训练日志&#xff0c;看到box_loss震荡不降、cls_l…

作者头像 李华
网站建设 2026/4/17 17:05:59

普华永道:AI、云计算和下一代网络重塑中东TMT未来

根据普华永道的一项研究&#xff0c;人工智能(AI)、云计算和下一代连接技术正在快速变革中东地区的电信、媒体和技术(TMT)格局&#xff0c;使该地区成为世界上发展最快的数字优先经济体之一。这项研究强调了AI、5G、云计算、游戏和量子技术融合如何重新定义基础设施投资、创新力…

作者头像 李华
网站建设 2026/4/17 7:00:55

2025年主流接口监控平台对比分析与最佳实践指南

核心观点摘要 1. 2025年主流接口监控平台在实时性、告警精准度与易用性上差异显著&#xff0c;商业方案普遍在开箱即用和智能分析上占优&#xff0c;开源或自建方案更适合技术能力强的团队。 2. 接口监控的关键技术路径分为全栈整合型与垂直工具链型&#xff0c;前者适合中大型…

作者头像 李华
网站建设 2026/4/18 20:56:08

机器学习:python电影推荐系统 机器学习 KNN算法(k近邻算法)Django框架 计算机 大数据毕业设计(建议收藏)

博主介绍&#xff1a;✌全网粉丝50W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战8年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…

作者头像 李华