news 2026/6/14 16:12:12

华为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/6/10 11:49:24

【空间计量经济学前沿】:利用R语言实现空间滞后与误差模型的终极对比

第一章&#xff1a;R语言空间自相关数据建模概述在地理信息系统与空间数据分析领域&#xff0c;空间自相关是衡量空间现象分布模式的重要统计特性。它描述的是地理位置相近的观测值在数值上是否具有相似性或依赖性。R语言凭借其强大的统计计算能力和丰富的空间分析扩展包&#…

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

R语言多元统计实战(从数据清洗到论文级图表输出全流程)

第一章&#xff1a;R语言多元统计分析在生态数据中的应用概述生态学研究常涉及多个变量的复杂交互关系&#xff0c;如物种丰度、环境因子、空间分布等。R语言凭借其强大的统计计算能力和丰富的生态分析包&#xff08;如vegan、ade4、nlme&#xff09;&#xff0c;成为处理高维生…

作者头像 李华
网站建设 2026/6/9 23:32:07

YOLOv8蒸馏训练指南:小模型也能拥有大模型精度

YOLOv8蒸馏训练指南&#xff1a;小模型也能拥有大模型精度 在智能安防摄像头里跑不动大模型&#xff1f;无人机避障需要低延迟却牺牲了检测精度&#xff1f;工业质检产线上&#xff0c;算力受限的小模型总漏检细微缺陷&#xff1f;这些现实问题背后&#xff0c;其实藏着一个越来…

作者头像 李华
网站建设 2026/6/10 13:17:08

CIO们在2026年应优先制定富有愿景的技术战略规划

在当今技术世界中&#xff0c;混乱现象比比皆是。在这个由AI放大的离心混沌时刻&#xff0c;组织需要通过可理解且可实现的技术愿景来实现统一和综合的关注点。六十五年前&#xff0c;技术愿景&#xff08;单数&#xff09;经常被简化为"你买了什么&#xff1f;"过去…

作者头像 李华
网站建设 2026/6/12 6:39:48

YOLOv8镜像集成netdata实时监控仪表盘

YOLOv8镜像集成netdata实时监控仪表盘 在AI模型训练和部署的日常工作中&#xff0c;你是否曾遇到过这样的场景&#xff1a;启动一个YOLOv8训练任务后&#xff0c;GPU利用率却始终徘徊在30%以下&#xff1f;或者程序突然崩溃&#xff0c;显存溢出却没有留下足够的线索&#xff1…

作者头像 李华