欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode每日一题———945. 使数组唯一的最小增量

程序员文章站 2024-03-15 09:13:29
...

LeetCode每日一题———945. 使数组唯一的最小增量

一开始想的是用无序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;
    }
};
相关标签: LeetCode