2024华为OD机试真题-去重求和-(C++/Java/Python)-C卷D卷-100分

2024华为OD机试题库-(A卷+B卷+C卷+D卷)-(JAVA、Python、C++)

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 个数的和。

代码

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());
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2024剑指offer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值