news 2026/4/15 9:23:31

华为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/15 9:23:31

天津大学:2025年人工智能赋能大学治理|附59页PDF文件下载

本文提供完整版报告下载&#xff0c;请查看文后提示。以下为报告节选&#xff1a;......文│天津大学本报告共计&#xff1a;59页。如欲获取完整版PDF文件。最后我在一线科技企业深耕十二载&#xff0c;见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事&#xff0c;早…

作者头像 李华
网站建设 2026/4/12 19:57:59

AI认知地图:从AIGC到多模态模型,小白也能掌握的20个前沿概念

文章介绍了AI领域的8个前沿认知&#xff0c;包括AIGC、多模态模型、AI Agent、具身智能、RAG技术、提示词工程、AI搜索工具使用以及AI学习方法。强调普通人应先从使用工具开始&#xff0c;在实践中掌握提示词技巧&#xff0c;无需一开始就深入研究底层原理&#xff0c;从而更好…

作者头像 李华
网站建设 2026/4/15 9:20:59

为什么你的空间模型总是不显著?R语言LISA聚类分析告诉你真相

第一章&#xff1a;为什么你的空间模型总是不显著&#xff1f;在构建空间计量模型时&#xff0c;许多研究者常遇到模型估计结果不显著的问题。这不仅影响结论的可信度&#xff0c;也可能误导后续决策。造成这一现象的原因多种多样&#xff0c;从数据质量到模型设定都可能埋藏隐…

作者头像 李华
网站建设 2026/4/14 11:02:14

YOLOv8 Warmup预热训练机制作用说明

YOLOv8 Warmup预热训练机制作用说明 在深度学习模型的训练过程中&#xff0c;你是否曾遇到这样的情况&#xff1a;刚启动训练时损失值突然飙升&#xff0c;甚至直接“炸掉”&#xff1f;尤其是在使用YOLOv8这类高性能目标检测模型时&#xff0c;这种现象尤为常见。问题往往不在…

作者头像 李华
网站建设 2026/4/11 5:38:00

降 AI 率效率最高的方法,我用下来确实省心

一、为什么手动降重总翻车&#xff1f;学术党必知的3大痛点“明明查重率达标了&#xff0c;导师却说论文有AI味要求重写&#xff01;”——这是不是你的真实写照&#xff1f;很多同学误以为同义词替换调整句式就能蒙混过关&#xff0c;结果陷入三大困局&#xff1a;❌ 痛点1&am…

作者头像 李华