23 最大N个数与最小N个数的和

题目描述

给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。说明:

·数组中数字范围[0,1000]

·最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1·输入非法返回-1

输入描述

·第一行输入M,M标识数组大小·第二行输入M个数,标识数组内容

·第三行输入N,N表达需要计算的最大、最小N个数

输出描述

输出最大N个数与最小N个数的和

用例

5

输入 95 88 83 64 100

2

输出 342

说明 最大2个数[100,95],最小2个数[83,64],输出为342。

5

输入 32342

2

输出 -1

说明 最大2个数[4,3],最小2个数[3,2],有重叠输出为-1。

复制代码
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
 
public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
 
    int m = sc.nextInt();
 
    int[] arr = new int[m];
    for (int i = 0; i < m; i++) {
      arr[i] = sc.nextInt();
    }
 
    int n = sc.nextInt();
 
    System.out.println(getResult(m, arr, n));
  }
 
  public static int getResult(int m, int[] arr, int n) {
    HashSet<Integer> set = new HashSet<>();
 
    for (int val : arr) {
      if (val < 0 || val > 1000) return -1;
      set.add(val);
    }
 
    if (set.size() < n * 2) return -1;
 
    Integer[] distinct_arr = set.toArray(new Integer[0]);
 
    Arrays.sort(distinct_arr, (a, b) -> a - b);
 
    int l = 0;
    int r = distinct_arr.length - 1;
    int ans = 0;
 
    while (n > 0) {
      ans += distinct_arr[l] + distinct_arr[r];
      l++;
      r--;
      n--;
    }
 
    return ans;
  }
}
相关推荐
麦兜*1 分钟前
大模型时代,Transformer 架构中的核心注意力机制算法详解与优化实践
jvm·后端·深度学习·算法·spring·spring cloud·transformer
秋难降1 小时前
栈:从基础概念到实战解题(详细)
数据结构·算法·排序算法
归云鹤1 小时前
QT信号和槽怎么传输自己定义的数据结构
开发语言·数据结构·qt
ezl1fe1 小时前
RAG 每日一技(十):向量检索的“死穴”?用混合搜索(Hybrid Search)来拯救!
后端·算法
Ahu_iii1 小时前
【图论基础】理解图的“闭环”:Tarjan 强连通分量算法全解析
算法·图论
PixelMind1 小时前
【IQA技术专题】DISTS代码讲解
图像处理·人工智能·python·算法·iqa
项目申报小狂人2 小时前
2025年1中科院1区顶刊SCI-投影迭代优化算法Projection Iterative Methods-附完整Matlab免费代码
开发语言·算法·matlab
AI 嗯啦2 小时前
机械学习--逻辑回归
算法·机器学习·逻辑回归
山烛2 小时前
逻辑回归详解:从数学原理到实际应用
python·算法·机器学习·逻辑回归
爱煲汤的夏二3 小时前
扩展卡尔曼滤波器 (EKF) 与无人机三维姿态估计:从理论到实践
单片机·嵌入式硬件·算法·无人机