[leetcode6017]向数组中追加 K 个整数

https://leetcode-cn.com/problems/append-k-integers-with-minimal-sum/

挺麻烦的题 给一个无序数组 要求插入k个正整数 这k个整数不能和数组中的数重复 求这k个数的和最小

显然 从1开始插是显而易见的办法

第一次方法 模拟直接开算 先用set存一下数 方便查找里面有没有出现过某个数 之后直接从1开始累加 遇到有的多加一个 结果TLE 明显想多了 k太大就会炸

正解:set存数完成去重加排序 之后对新的vector进行遍历 如果这个数小于k k++并且记录下这个数 直到处理完毕 直接用求根公式算出结果即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

class Solution
{
public:
long long minimalKSum(vector<int> &nums, int k)
{
set<int> st;
for (const int &i : nums)
{
st.insert(i);
}
vector<int> arr;
//去重加排序
for (const int &i : st)
{
arr.push_back(i);
}
ll t = 0, kk = k;
//换一种思路 不是看范围内的这个数是不是在数组中 而是看数组中的这个数在不在范围内 大大减小枚举量
for (const int &i : arr)
{
if (i <= kk)
{
kk++;
t += i;
}
}
// k个数 检查一下前k个数里面 原数组有几个
// for(int i=1;i<=k;i++){
// if(st.count(i)){
// //如果存在这个数
// k++;
// t+=i;
// }
// }
return 1LL * (1 + kk) * kk / 2 - t;
}
};

[leetcode6017]向数组中追加 K 个整数
https://47.97.0.163/2022/03/07/leetcode6017向数组中追加-k-个整数/
作者
John Doe
发布于
2022年3月7日
许可协议