2024华为OD机试真题目录-(B卷C卷D卷)-【C++ Java Python】
题目描述
给定一个数组,编写一个函数,
计算他的最大N个数和最小N个数的和,
需要对数组进行去重。
输入描述
第一行输入M,M表示数组大小
第二行输入M个数,表示数组内容
第三行输入N表示需要计算的最大最小N的个数
输出描述
输出最大N个数和最小N个数的和
示例一
输入
5
95 88 83 64 100
2
输出
342
说明
最大2个数[100 95]最小 2 个数[83 64]
输出342
示例二
输入
5
3 2 3 4 2
2
输出
-1
说明
最大2个数是[4 3]最小2个数是[3 2]
有重叠输出为-1
考点
数据结构
解题思路
解题思路如下:
读取输入:
首先,程序读取数组的大小 M。
然后,依次读取并存储数组中的 M 个整数到动态数组 nums 中。
接着,读取需要计算的最大最小数的数量 N。
数组去重,然后升序排序数组:
初始化结果变量 res 为 -1,表示存在重复数字的情况下的输出结果。
检查经过去重处理后的数组长度是否大于等于 2 * N。如果满足条件,则将结果初始化为 0 并重新计算。
遍历数组,将位于数组两端(前 N 个和后 N 个)的数累加到结果变量 res 中。
输出结果:
输出最终计算得到的最大 N 个数和最小 N 个数的和。
代码
c++
#include <bits/stdc++.h>
using namespace std;
int main() {
int M,N;
cin>>M;
vector<int> vec(M);
for(int i=0;i<M;i++) {
cin>>vec[i];
}
cin>>N;
vector<int> fin;
for(int i=0;i<M;i++) {
if(find(fin.begin(),fin.end(),vec[i])==fin.end()){
fin.push_back(vec[i]);
}
}
sort(fin.begin(), fin.end(