news 2026/5/1 8:24:08

华为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/5/1 5:48:07

YOLOv8 ImportError导入失败原因分析

YOLOv8 ImportError导入失败原因分析 在部署YOLOv8模型时&#xff0c;不少开发者都遇到过这样的问题&#xff1a;明明使用的是“开箱即用”的深度学习镜像&#xff0c;却在第一行代码 from ultralytics import YOLO 上卡住&#xff0c;抛出 ImportError 或 ModuleNotFoundError…

作者头像 李华
网站建设 2026/5/1 5:48:52

YOLOv8 Git Commit提交规范,参与开源贡献必读

YOLOv8 Git Commit提交规范&#xff0c;参与开源贡献必读 在AI模型开发日益依赖协作的今天&#xff0c;一个看似微不足道的git commit -m "update"&#xff0c;可能正悄悄埋下团队协作效率低下的隐患。尤其当你试图为像 YOLOv8 这样活跃于GitHub、每日被数千开发者使…

作者头像 李华
网站建设 2026/5/1 6:55:12

YOLOv8 Neck模块改进方案:引入BiFPN提升性能

YOLOv8 Neck模块改进方案&#xff1a;引入BiFPN提升性能 在目标检测的实际部署中&#xff0c;一个常被忽视但至关重要的挑战是——如何让模型既看得清小目标&#xff0c;又不牺牲推理速度&#xff1f; 以工业质检为例&#xff0c;传送带上的微小划痕可能只有几个像素大小&#…

作者头像 李华
网站建设 2026/5/1 6:57:07

MySQL的character_set_server 修改不了?

在数据库管理和开发领域&#xff0c;MySQL作为最广泛使用的开源关系型数据库管理系统之一&#xff0c;其配置和优化一直是技术人员关注的重点。特别是在处理多语言和特殊字符时&#xff0c;character_set_server的设置至关重要。然而&#xff0c;有些用户在尝试修改character_s…

作者头像 李华
网站建设 2026/5/1 8:18:13

2025年欧洲十大IT新闻盘点:人工智能引领技术变革

在本年度《Computer Weekly》对欧洲大陆IT新闻的回顾中&#xff0c;我们重点关注了荷兰、法国、挪威、瑞典和西班牙的技术发展动态。毫不意外&#xff0c;人工智能在本次盘点中占据了突出地位&#xff0c;企业IT的各个领域都受到其影响。这项技术在商业领域不存在边界&#xff…

作者头像 李华
网站建设 2026/4/24 10:03:03

为什么你的SEM模型总不收敛?lavaan调试技巧大公开

第一章&#xff1a;为什么你的SEM模型总不收敛&#xff1f;lavaan调试技巧大公开在使用R语言中的lavaan包进行结构方程建模&#xff08;SEM&#xff09;时&#xff0c;模型不收敛是常见但令人困扰的问题。这通常源于数据质量、模型设定不当或参数识别问题。掌握有效的调试策略&…

作者头像 李华