Leetcode 2910. Minimum Number of Groups to Create a Valid Assignment

编程入门 行业动态 更新时间:2024-10-25 00:23:47

Leetcode 2910. <a href=https://www.elefans.com/category/jswz/34/1757466.html style=Minimum Number of Groups to Create a Valid Assignment"/>

Leetcode 2910. Minimum Number of Groups to Create a Valid Assignment

  • Leetcode 2910. Minimum Number of Groups to Create a Valid Assignment
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:2910. Minimum Number of Groups to Create a Valid Assignment

1. 解题思路

这一题有点惭愧,我走了弯路,结果居然还是看了大佬们的答案才搞定的,简直惭愧……

这道题其实思路挺简单,首先根据分组规则,我们对原始数组当中得值根据元素进行组合,看一下有多少unique元素以及每个元素对应出现过多少次。然后我们就是要找一个 k k k使得这些次数均可以拆分为 k k k和 k + 1 k+1 k+1的组合,然后求其最少可以分的组数即可。我们甚至还可以进一步简化问题,将同样的次数在进行合并,因为他们的分法一定是相同的。

因此,所有的难点也就在于,如何找到这个最大的 k k k,使得所有的组均可以拆分为 k k k和 k + 1 k+1 k+1的组合。

我一开始想岔了,用二分法想要进一步优化效率,但是后来才发现这个东西他并不是连续变化的,然后就把我自己卡死了……

结果让人吐血的是,其他大佬的解答居然就是一个简单遍历,然后,然后就没有然后了……

属实是画蛇添足了……

2. 代码实现

给出python代码实现如下:

class Solution:def minGroupsForValidAssignment(self, nums: List[int]) -> int:tmp = list(Counter(nums).values())tmp = Counter(tmp)cnts = list(tmp.keys())groups = [tmp[x] for x in cnts]def divide(k):ans = 0for cnt, num in zip(cnts, groups):x = math.ceil(cnt / (k+1))r = x * (k+1) - cntif r > x:return -1ans += x*numreturn ansk = min(cnts)for i in range(k, 0, -1):ans = divide(i)if ans != -1:return ansreturn -1

提交代码评测得到:耗时868ms,占用内存34.7MB。

更多推荐

Leetcode 2910. Minimum Number of Groups to Create a Valid Assignment

本文发布于:2023-12-05 00:48:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1662606.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Minimum   Number   Leetcode   Valid   Assignment

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!