這題蠻多種解法的,這邊我用兩個 HashMap 來解,一個用來計算數字出現的次數,另一個用來計算出現次數的數字。
- 先用第一個 HashMap 計算數字出現的次數
- 再用第二個 HashMap 來計算出現次數的數字
- 最用用 K 來移除數字,如果移除的數字次數大於等於 K 就移除,否則就停止開始計算結果
func findLeastNumOfUniqueInts(arr []int, k int) int {
number, counter := make(map[int]int), make(map[int][]int)
for _, v := range arr {
number[v]++
}
var max_count int
for k, v := range number {
counter[v] = append(counter[v], k)
max_count = intMax(max_count, v)
}
var result int
for i := 1; i <= max_count; i++ {
for k > 0 && len(counter[i]) > 0 {
if k-i >= 0 {
counter[i] = counter[i][1:]
k -= i
} else {
k = 0
break
}
}
if k == 0 {
result += len(counter[i])
}
}
return result
}
func intMax(a, b int) int {
if a > b {
return a
}
return b
}