Problem#
給你一個正整數陣列 nums
,你對陣列做以下操作:
- 從裡面刪掉 2 個一樣的數字
- 從裡面刪掉 3 個一樣的數字
回傳最少要多少次操作,能使 nums
變空?如果無法則回傳 -1
。
測資限制#
- $2 \le n \le 10^5$
- $1 \le val \le 10^6$
想法#
因為每次刪除的數字都要一樣,所以對於每個數字可以單獨看刪除的次數,最後加總起來就是答案。
統計每個數字出現的次數,之後對於每個數字出現的次數,去貪心試試看能不能刪除,因為目標是操作數要最小,所以每次都從 3
開始刪,如果刪除 3
之後剩下的個數不能整除 3
或 2
的話,代表這次不能刪除 3
個一樣的,改試刪除 2
,刪除 2
個一樣的數字後,剩下的數字個數也不能整除 3
或 2
時,代表無法刪空,此時回傳 -1
;否則,繼續進行下去直到所有數字都刪光,回傳總共刪除幾次即可。
AC Code#
- 時間複雜度: $\mathcal{O}(n\log{n})$
- 空間複雜度: $\mathcal{O}(n)$