2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++)
题目描述
给定一个数组,编写一个函数,
计算他的最大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 个数的和。
代码
python
m=int(input())
vec=list(map(int,input().split()))
n=int(input())
arr=[] #去重后的数组
for i in vec:
if i not in arr:
arr.append(i)
#升序排序
arr.sort()
res=-1
if 2*n>len(arr):
print(res)
else:
res=0
#加上最小n个数
for i in range(n):
res+=arr[i]
#加上最大n个数
for i in range(len(arr)-1, len(arr)-1-n, -1):
res+=arr[i]
print(res)
目录