zoukankan      html  css  js  c++  java
  • LeetCode~945.使数组唯一的最小增量

    945. 使数组唯一的最小增量

    给定整数数组 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
    

    个人思路解析

    class Solution {
        public int minIncrementForUnique(int[] A) {
            // 判空
            if(A.length == 0) return 0;
            // 初始化变量
            int move = 0;
    		// 排序
            Arrays.sort(A);
    		// 遍历该数组中元素
            for(int i = 1; i < A.length;i++){
                // 当前元素如果小于等于前面的元素,执行一次move操作
                while(A[i] <= A[i-1]){
                    move++;
                    A[i]++;
                }
            }
    		// 返回最小增量
            return move;
        }
    }
    

    提交结果

    945.使数组唯一的最小增量

    第一时间没能想到啥好的方法,这个耗时简直辣眼睛∑(っ°Д°;)っ

    还是贴一下执行用时分布图表里面大佬的代码缓解一下尴尬吧

    class Solution {
        public int minIncrementForUnique(int[] A) {
            // 判空
            if(A == null || A.length == 0) {
                return 0;
            }
            // 初始化变量
            int[] status =  new int[50000];
            int counts = 0;
            int expect = 0;
    		// 先统计数组中每位元素出现次数
            for(int num : A) {
                status[num]++;
            }
    		// 变量新数组
            for(int i = 0; i < 50000; i++) {
                // 判断
                if(status[i] > 1) {
                    expect = status[i] - 1; // 当前元素超过的数量
                    counts += expect; // move操作次数
                    status[i + 1] += expect; // 如下位元素出现次数大于1,则需继续执行move操作
                    status[i] = 1; // 减少内存消耗
                }
            }
    		// 返回结果
            return counts;
        }
    }
    

    945.使数组唯一的最小增量

    果然大佬就是大佬,一开始我也是用的固定数组先把出现次数统计起来的,不过下面的循环判断写法不一样,导致提交超时,还是得多学习学习大佬的思路才行!

    来源:力扣(LeetCode)
    链接: https://leetcode-cn.com/problems/minimum-increment-to-make-array-unique/submissions/

  • 相关阅读:
    JS的匿名函数和递归应用
    sql server中分布式查询随笔
    Oracle、DB2、SQLSERVER、Mysql、Access分页SQL语句梳理
    db2相关问题及解决方法
    DB2命令大全
    作用域和作用域链浅解析
    css居中的几个实现方法
    选择排序
    ... 语法记录
    call() 与 apply() 和 bind()
  • 原文地址:https://www.cnblogs.com/unrecognized/p/12546089.html
Copyright © 2011-2022 走看看