前言
每天和你一起刷 LeetCode 每日一题~
小聊两句
前几天的时候决定每天学点前端,然后总结一个前端速成的必备知识系列,结果学了几天发现前端内容博大精深,一时半会儿是更新不出来了,慢慢积累总结,会有更新的那一天的
LeetCode 启动!
题目:K 次乘运算后的最终数组 I
代码与解题思路
先读题:题目给了一个数组,我们可以选择一个整数的集合并将他们全部删除,让我们求出用最少的集合数将数组删到一半及以下的大小
核心思路:怎么样删的更快?找最大的整数集合依次删除;怎么找到最大的整数集合?用哈希计数;怎么依次删除?排序。
所以,整个流程就是,先计数,再排序,最后依次删除整数集合,达成题目条件返回结果即可,代码如下:
go
func minSetSize(arr []int) int {
nums, sum := make([]int, 100010), 0
for _, v := range arr {
nums[v]++
sum++
}
slices.Sort(nums)
slices.Reverse(nums)
cnt := sum
for i, v := range nums {
cnt -= v
if cnt <= sum/2 {
return i+1
}
}
return -1
}
每天进步一点点,我们明天不见不散~
可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。