当前位置: 首页 > article >正文

【从零开始的LeetCode-算法】945. 使数组唯一的最小增量

给你一个整数数组 nums 。每次 move 操作将会选择任意一个满足 0 <= i < nums.length 的下标 i,并将 nums[i] 递增 1

返回使 nums 中的每个值都变成唯一的所需要的最少操作次数。

生成的测试用例保证答案在 32 位整数范围内。

示例 1:

输入:nums = [1,2,2]
输出:1
解释:经过一次 move 操作,数组将变为 [1, 2, 3]。

示例 2:

输入:nums = [3,2,1,2,1,7]
输出:6
解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。
可以看出 5 次或 5 次以下的 move 操作是不能让数组的每个值唯一的。

提示:

  • 1 <= nums.length <= 10^5

  • 0 <= nums[i] <= 10^5

我的解答

class Solution {
    public int minIncrementForUnique(int[] nums) {
        // 对数组进行排序
        Arrays.sort(nums);
        int res = 0;
        // 遍历排好序的数组
        for(int i = 1;i < nums.length; i++){
            // 如果当前元素等于上一元素,则该元素数值+1
            if(nums[i] == nums[i - 1]){
                nums[i]++;
                res++;
            }
            // 因为上面操作可能会打乱排好序的数组,所以需要处理错乱的元素
            // 如果当前元素小于上一元素(即排序错乱),则该元素数值需要增加至比前一元素的值要大
            // 即增加至比前一元素要大1的值,其操作次数为(上一元素的值 - 当前元素的值 + 1) 
            else if(nums[i] < nums[i - 1]){
                res += nums[i - 1] - nums[i] + 1;
                nums[i] = nums[i - 1] + 1;
            }
        }
        return res;
    }
}

 


http://www.kler.cn/news/359387.html

相关文章:

  • 五款最佳免费解压软件APP推荐:手机端高效解压工具盘点
  • SHELL脚本之循环语句的for循环以及中断循环的语句
  • 暖水毯/取暖毯语音识别控制芯片IC方案
  • 使用Verilog设计分频模块(2Hz)
  • 外贸商城源码,进出口跨境电商平台电脑端+移动端网站+客服系统 网站设计及源码输出
  • 基于Java+Springboot+Vue开发的体育用品商城管理系统
  • @RequestMapping对不同参数的接收方式
  • Bluetooth Channel Sounding中关于CS Step及Phase Based Ranging相应Mode介绍
  • 算法|牛客网华为机试1-10C++
  • LeetCode第100题:相同的树
  • 10-Python基础编程之函数
  • OpenLayers:构建现代Web地图应用
  • 用动态IP软件改变IP地址:探索原理与实用指南‌
  • CTFHUB技能树之文件上传——前端验证
  • Java中JSR303校验
  • Flux.merge 使用说明书
  • 基于STM32的工厂安防巡检机器人设计流程实现自主识别检测、机器人自主行驶、环境监控和数据采集
  • 传智杯 第六届—第二场—D
  • MATLAB支持的字体
  • 人工智能发展:一场从“被教导”到“自我成长”的奇妙冒险