• 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/

  • 相关阅读:
    边缘检测算法——Canny和LoG边缘检测算法
    Java读书笔记03 输入输出
    CMake入门
    二叉树及二叉树的遍历
    Java读书笔记11 图形程序——颜色 字体 图像
    XNA实现骨骼动画 归纳总结
    Java读书笔记09 内部类
    Java读书笔记02 基础知识
    Java用户界面 模型视图控制器(MVC)模式
    简单理解传值和传引用
  • 原文地址:https://www.cnblogs.com/unrecognized/p/12546089.html
Copyright © 2020-2023  润新知