leetcode945 使陣列唯一的最小增量

2021-10-04 06:31:30 字數 1545 閱讀 4897

給定整數陣列 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 操作是不能讓陣列的每個值唯一的。

基本思想:暴力

說明:時間複雜度太高o(n*max(a)),通過了56/59

class

solution

else

s.insert

(t);

res +

=(t - a[i]);

}}return res;}}

;

上述中是用unordered_set實現,猜測呼叫find方法比較耗時

用陣列代替unordered_set

class

solution

else

++s[t]

; res +

=(t - a[i]);

}}return res;}}

;

排序+貪心

class

solution

else

}return res;}}

;

計數+移位

class

solution

;//為了避免陣列中的數都是40000

int m =-1

;int res =0;

for(

auto a : a)

for(

int i =

0; i < m;

++i)}if

(count[m]

>1)

return res;}}

;

線性探測 + 資料壓縮

參考鏈結

class

solution

return res;

}private

:int

find_pos

(vector<

int>

& flag,

int a)

//對應位置已經放了數,需要探測下乙個位置

p =find_pos

(flag, flag[a]+1

);flag[a]

= p;

//將探測到的位置更新

return p;}}

;

Leetcode 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 操作,陣列將變為...

LeetCode 945 使陣列唯一的最小增量

給定整數陣列 a,每次 move 操作將會選擇任意 a i 並將其遞增 1。返回使 a 中的每個值都是唯一的最少操作次數。示例 1 輸入 1,2,2 輸出 1 解釋 經過一次 move 操作,陣列將變為 1,2,3 示例 2 0 a.length 40000 0 a i 40000 我是用雜湊表做的...

leetcode945 使陣列唯一的最小增量

給定整數陣列 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 操作...