0
点赞
收藏
分享

微信扫一扫

新浪微博2020界校招笔试-算法工程师


        给定字符串A,A是由逗号分割的数字串,A可以解析成整数数组B。每次操作可以选择任意B[i],并将其递增1.返回使得B中的每个值都是唯一的最小操作次数。

输入描述:

输入每一行字符串,用逗号分隔

1,2,3,4,5

输出描述:

输出一位整数

0

#include<cstdio>
#include<cstring>
#include<string>
#include<vector>
#include<unordered_set>
#include<algorithm>
using namespace std;
const int N=4e4+5;
char s[N];
int main()
{
vector<int> vec;
unordered_set<int> S;
scanf("%s",s);
int len=strlen(s);
for(int i=0;i<len;++i)
{
if(s[i]==',')
continue;
string num;
while(i<len&&s[i]!=',')
num+=s[i++];
--i;
int x;
sscanf(num.c_str(),"%d",&x);
S.insert(x);
vec.push_back(x);
}
sort(vec.begin(),vec.end());
int flag=vec[0]+1,ans=0;
while(S.find(flag)!=S.end())
++flag;
for(int i=1;i<vec.size();++i)
{
if(vec[i]==vec[i-1])
{
while(flag<vec[i])
{
flag = vec[i];
while(S.find(flag)!=S.end())
++flag;
}
ans+=flag-vec[i];
++flag;
}
}
printf("%d\n",ans);
return 0;
}

 

举报

相关推荐

0 条评论