LeetCode每日一题———945. 使数组唯一的最小增量
程序员文章站
2024-03-15 09:13:29
...
一开始想的是用无序map计数,然后针对每个多出来的元素,再利用map的O(1)查找功能,看经过++以后是否重复,乍一想思想还挺简单的,好吧,最后结果超时,时间太长了!!
后来学习了同学的办法,桶计数,也就是用数组来存储元素出现的次数,然后从0开始遍历数组,如果出现次数>1,那就把下一个元素的value,加上当前元素出现的次数-1,比如有5个3,1个4,那么遍历以后4对应的value就变成1+4=5,然后接着向后操作,这么做相当于把所有元素都合在一起考虑,相比于一个一个考虑节省了很大的时间。
class Solution {
public:
int minIncrementForUnique(vector<int>& A) {
if(!A.size()) return 0;
int m = A.size() + 40000;
int arr[m] = {0};
int Count = 0;
int max = 0;
for(int i:A)
{
arr[i]++;
max = i>max?i:max;
}
for(int j = 0;j<m;j++)
{
if(j>max && arr[j] == 0)
break;
if(arr[j] >1)
{
arr[j+1] += arr[j] - 1;
Count += arr[j] - 1;
}
}
return Count;
}
};
上一篇: 55. 跳跃游戏