Problem: 945. Minimum Increment to Make Array Unique 使数组唯一的最小增量

排序,然后统计每个数字的频次,对ch[a] > 1的,需要累加的,找到后续ch[l]==0的最小数字,累加的值就是 ans += l - a,做标记ch[l] = 1以及频次修改ch[a]–,l继续向后的,这样找到的就是最小值

Code

class Solution {
public:
    int ch[101001];
    int minIncrementForUnique(vector<int>& nums) {
        unordered_map<int, int> ump;
        sort(nums.begin(), nums.end());
        memset(ch, 0, sizeof(ch));
        for(int & i : nums) {
            ch[i]++;
        }
        int n = nums.size(), l = nums[0], ans = 0, a;
        for(int i = 0; i < n; i++) {
            a = nums[i];
            if(i > 0 && a==nums[i-1]) continue;
            // l = a + 1;
            while(ch[a] > 1) {
                if(l < a + 1) l = a + 1;
                while(ch[l]!=0) {
                    l++;
                }
                ans += l - a;
                ch[a]--;
                ch[l] = 1;
                l++;
            }
        }
        return ans;
    }
};

更多推荐