zoukankan      html  css  js  c++  java
  • 排序:使数组唯一的最小增量 (3.22 leetcode每日打卡)

    给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1。
    返回使 A 中的每个值都是唯一的最少操作次数。
    示例 1:
    输入:[1,2,2]
    输出:1
    解释:经过一次 move 操作,数组将变为 [1, 2, 3]。
    示例 2:
    输入:[3,2,1,2,1,7]
    输出:6
    解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。
    可以看出 5 次或 5 次以下的 move 操作是不能让数组的每个值唯一的。

    提示:

     0 <= A.length <= 40000
     0 <= A[i] < 40000
     
    思路:先排序,再依次遍历数组元素,若当前元素小于等于它前一个元素,则将其变为前一个数+1。
     1 int cmp(const void* a, const void* b)
     2 {
     3     return (*(int*)a - *(int*)b);
     4 }
     5 
     6 int minIncrementForUnique(int* A, int ASize)
     7 {
     8     int cnt = 0;
     9     qsort(A, ASize, sizeof(A[0]), cmp); //排序
    10 
    11     for (int i = 1; i < ASize; i++)
    12     {
    13         if (A[i] <= A[i - 1])
    14         {
    15             int pre = A[i];
    16             A[i] = A[i - 1] + 1;
    17             cnt += A[i] - pre;
    18         }
    19     }
    20     return cnt;
    21 }
     
  • 相关阅读:
    栈的操作总结
    C语言复习大纲
    生理周期
    石子合并
    幸运数字
    最长&最短文本
    C++引用
    C++入门
    直角三角形
    思维的囚徒--读书摘记和自己的肤浅解读--2021.1
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12545159.html
Copyright © 2011-2022 走看看