Golang:
思路:贪心,首先,我们需要知道每个数字在数组中出现的数目,然后将这些数目做个排序,每次都删去出现最多次数的数目,直到这些删除的数目之和超过了数组长度的一半。
代码如下:
func minSetSize(arr []int) int {
mp:=make(map[int]int)
for _,v:=range arr{
mp[v]++
}
var val []int
for _,v:=range mp{
val=append(val,v)
}
sort.Ints(val)
temp:=0
for i:=len(val)-1;i>=0;i--{
temp+=val[i]
if temp>=len(arr)/2{
return len(val)-i
}
}
return 0
}
有疑问加站长微信联系(非本文作者)