LeetCode——945.使数组唯一的最小增量(JavaScript)

本文介绍了一种算法,用于计算使整数数组中每个值都唯一的最少操作次数。通过排序和遍历数组,确定每个元素需增加的最小值,以确保所有元素的唯一性,最终返回所有操作的总次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定整数数组 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 操作是不能让数组的每个值唯一的。

提示:

  1. 0 <= A.length <= 40000
  2. 0 <= A[i] < 40000

思路

先将数组排序,举例

A =  [1,1,2,2,3,7]
唯一:[1,2,3,4,5,7]
增加 1 + 1 + 2 + 2 = 6

目的就是算出这两个数组的差的总和。
我们用一个变量 min 来表示当前元素为了满足数组唯一所要变成的最小的值,初始为 Number.MIN_SAFE_INTEGER,那么开始循环排序过的 A 数组吧!
首先让 min ++,然后判断 min 与 当前元素 val 的大小,若

  1. 若 min < val,说明这个元素不需要变化,让 min = val 即可;
  2. 否则,就要让这个元素增加到 min,差值为 min - val,累加这个差值。

总代码:

/**
 * @param {number[]} A
 * @return {number}
 */
var minIncrementForUnique = function(A) {
  let min = Number.MIN_SAFE_INTEGER;
  let res = 0;
  A = A.sort((a, b) => a - b)
  A.forEach((val, index) => {
    min ++;
    if (min < val) {
      min = val;
    } else {
      res += min - val;
    }
  })
  return res;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的桐人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值