1. 程式人生 > >LeetCode——945.使陣列唯一的最小增量(JavaScript)

LeetCode——945.使陣列唯一的最小增量(JavaScript)

給定整數陣列 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; };