最新华为OD机试真题-最大/小 N 个数的和(100分)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新 华为OD机试-D卷 的三语言AC题解

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

=> 最大 N 个数与最小 N 个数的和(100分) <=

华为OD

🌍 评测功能需要 =>订阅专栏<= 后联系清隆解锁~

🍓OJ题目截图

alt

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

问题描述

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

说明:

  • 数组中数字范围 [0, 1000]。
  • 最大 个数与最小 个数不能有重叠,如有重叠,输入非法返回 -1。
  • 输入非法返回 -1。

输入格式

第一行输入 表示数组大小。

第二行输入 个数,表示数组内容。

第三行输入 表示需要计算的最大、最小 个数。

输出格式

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

样例输入

输入

5
95 88 83 64 100
2

输出

342

输入

5
3 2 3 4 2
2

输出

-1

数据范围

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

题解

题目要求计算数组中最大 个数与最小 个数的和,并且这两个部分不能有重叠。首先需要对数组进行去重,然后检查去重后的数组长度是否满足 2 * 的要求。如果满足,则计算最大 个数与最小 个数的和;否则返回 -1。

参考代码

  • Python
def max_min_sum(arr, n):
    arr = list(set(arr))
    arr.sort()
    if 2 * n > len(arr):
        return -1
    return sum(arr[:n]) + sum(arr[-n:])

if __name__ == "__main__":
    m = int(input())
    arr = list(map(int, input().split()))
    n = int(input())
    print(max_min_sum(arr, n))
  • Java
import java.util.Arrays;
import java.util.Scanner;
import java.util.Set;
import java.util.HashSet;

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(maxMinSum(arr, n));
    }

    public static int maxMinSum(int[] arr, int n) {
        Set<Integer> set = new HashSet<>();
        for (int num : arr) {
            set.add(num);
        }
        Integer[] uniqueArr = set.toArray(new Integer[0]);
        Arrays.sort(uniqueArr);
        if (2 * n > uniqueArr.length) {
            return -1;
        }
        int sum = 0;
        for (int i = 0; i < n; i++) {
            sum += uniqueArr[i];
        }
        for (int i = uniqueArr.length - n; i < uniqueArr.length; i++) {
            sum += uniqueArr[i];
        }
        return sum;
    }
}
  • Cpp
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>

using namespace std;

int maxMinSum(vector<int>& arr, int n) {
    set<int> uniqueSet(arr.begin(), arr.end());
    vector<int> uniqueArr(uniqueSet.begin(), uniqueSet.end());
    if (2 * n > uniqueArr.size()) {
        return -1;
    }
    sort(uniqueArr.begin(), uniqueArr.end());
    int sum = 0;
    for (int i = 0; i < n; ++i) {
        sum += uniqueArr[i];
    }
    for (int i = uniqueArr.size() - n; i < uniqueArr.size(); ++i) {
        sum += uniqueArr[i];
    }
    return sum;
}

int main() {
    int m;
    cin >> m;
    vector<int> arr(m);
    for (int i = 0; i < m; ++i) {
        cin >> arr[i];
    }
    int n;
    cin >> n;
    cout << maxMinSum(arr, n) << endl;
    return 0;
}
#华为OD##华为##春招##秋招##笔试#
最新华为OD机试-C&amp;D卷 文章被收录于专栏

本专栏给大家提供了华为2024最新华为OD-C/D卷的题目汇总和(Java/Cpp/Python)三语言解析 + 提供OJ在线评测

全部评论
🌍 评测功能需要订阅专栏后 ,联系清隆解锁~
点赞
送花
回复 分享
发布于 06-28 19:01 浙江

相关推荐

2024年3月11日1、自我介绍2、说一下实习项目(是什么、难点是什么、怎么解决的)3、高并发是多大的高并发?4、什么叫唯一合同号?怎么实现的?5、redis是单机的吗?还是集群?6、业务有上线吗?7、讲一下RPC框架和社区项目?8、RPC框架中为什么要讲服务注册到Zookeeper上面呢?9、Zookeeper挂了怎么办?服务不是不可用了吗?10、那你知道Zookeeper有什么高可用机制来维护其高可用吗?(原理)11、你怎么用Zookeeper,怎么部署的,只有一台服务器吗?12、业界Zookeeper怎么使用的?13、分布式系统用到Zookeeper或ETCD,肯定不是一台,怎么搭建集群?14、GLOG做了什么?15、为什么要做GLOG社区呢?16、kafka搭建异步系统是为了解决什么问题?17、kafka也是自己部署的吗?有部署几台机器啊?18、kafka高可用机制?19、kafka怎么保证消息不丢失?20、kafka高吞吐是怎么实现?21、kafka性能为什么好?怎么设计使得他性能好的?比如在代码层面或系统层面?22、MySQL四个隔离级别?23、幻读需要哪种隔离级别才能解决(自己埋坑,可重复读不一定能解决)?24、要哪种隔离级别才能完全解决可重复读?(不考虑性能)25、如果有幻读的产生要怎么避免?26、MVCC是怎么实现的?27、MySQL的InnoDB索引是什么?28、B+树的叶子节点存的是什么?29、二级索引存什么?30、回表是什么?31、针对减少回表,怎么做数据库的查询要怎么做优化?32、MySQL的undo&nbsp;log、redo&nbsp;log、binlog?33、Redis的ZSet有用过吗?34、查询范围的复杂是什么样的?35、Redis中的ZSet为什么要用跳表?36、平衡树也可以,红黑树也可以,为什么要用跳表?37、Redis的持久化机制?38、那你用的Redis有没有开?实习的Redis有没有开持久化机制呢?39、算法:点(0,0)到点(x,y)存在障碍,怎么找到最短的路径(BFS)40、算法:快速排序41、反问:●&nbsp;技术栈的背景和原理要思考清楚怎么做?●&nbsp;设计技术方案+每个技术的优略性+需求和业务(做技术选型)●&nbsp;抗压#我的实习求职记录#
查看43道真题和解析 我的实习求职记录
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务