Leetcode 2870 - Minimum Number of Operations to Make Array Empty

題目

Problem#

給你一個正整數陣列 nums,你對陣列做以下操作:

  • 從裡面刪掉 2 個一樣的數字
  • 從裡面刪掉 3 個一樣的數字

回傳最少要多少次操作,能使 nums 變空?如果無法則回傳 -1

測資限制#

  • $2 \le n \le 10^5$
  • $1 \le val \le 10^6$

想法#

因為每次刪除的數字都要一樣,所以對於每個數字可以單獨看刪除的次數,最後加總起來就是答案。
統計每個數字出現的次數,之後對於每個數字出現的次數,去貪心試試看能不能刪除,因為目標是操作數要最小,所以每次都從 3 開始刪,如果刪除 3 之後剩下的個數不能整除 32 的話,代表這次不能刪除 3 個一樣的,改試刪除 2,刪除 2 個一樣的數字後,剩下的數字個數也不能整除 32 時,代表無法刪空,此時回傳 -1;否則,繼續進行下去直到所有數字都刪光,回傳總共刪除幾次即可。

AC Code#

  • 時間複雜度: $\mathcal{O}(n\log{n})$
  • 空間複雜度: $\mathcal{O}(n)$