刚开始是用一层for循环,判断num[i]是否唯一,不出意料,肯定超时;
class Solution {
public:
int minIncrementForUnique(vector<int>& A)
{
map<int,int> judge;
int ans = 0;
vector<int>num = A;
sort(num.begin(), num.end());
//int begin = num.front();
for (int i = 0; i < num.size(); i++)
{
if (judge[num[i]] == 0)
judge[num[i]]++;
else
{
while (judge[num[i]]!=0)
{
num[i]++;
ans++;
}
judge[num[i]]++;
}
}
return ans;
}
};
最后我的解法就是先创建一个map类型的容器,统计好数组里所有相同数字的位置,然后用一个while循环,不断消去count的顶,指导count的size为0
class Solution {
public:
int minIncrementForUnique(vector<int>& A)
{
map<int,vector<int>>count;
int ans = 0;
vector<int>num = A;
sort(num.begin(), num.end());
//int begin = num.front();
for (int i = 0; i < num.size(); i++)
{
count[num[i]].push_back(i);
}
while (!count.empty())
{
pair<int, vector<int>> te = *count.begin();
if (te.second.size() != 1)
{
int te_num = te.first + 1;
for (int j = 1; j < te.second.size(); j++)
{
count[te_num].push_back(te.second[j]);
ans += te_num - te.first;
te_num++;
}
}
count.erase(count.begin());
}
return ans;
}
};