获取题库不需要订阅专栏,可直接私信我进入CSDN领军人物top1博主的华为OD交流圈观看完整题库、最新面试实况、考试报告等内容以及大佬一对一答疑。
题目描述
给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。
说明:
- 数组中数字范围[0, 1000]
- 最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1
- 输入非法返回-1
输入描述
- 第一行输入M, M标识数组大小
- 第二行输入M个数,标识数组内容
- 第三行输入N,N表达需要计算的最大、最小N个数
输出描述
输出最大N个数与最小N个数的和
题目解析
题目要求给定一个数组,计算并返回数组中不重复的最大N个数与最小N个数的和。首先,我们需要对数组进行去重,然后分别找到数组中的最大N个数和最小N个数。需要注意的是,这两个集合不能有重叠,如果有重叠则输入非法,返回-1。
算法步骤
1.读取数组大小和数组内容。
2.读取需要计算的最大、最小N个数。
3.对数组进行去重。
4.找出去重后数组中的最大N个数和最小N个数(这里我们使用优先队列(最小堆和最大堆)来分别存储最大和最小的N个数)。
5.检查这两个集合是否有重叠。
6.如果没有重叠,计算并返回它们的和;如果有重叠或输入非法,则返回-1。
Java算法源码
<