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