leetcode-168周赛-1296-划分数字为连续数字的集合

Posted 真不知道叫啥好

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-168周赛-1296-划分数字为连续数字的集合相关的知识,希望对你有一定的参考价值。

题目描述:

 

 

 

 自己的提交:

class Solution:
    def isPossibleDivide(self, nums: List[int], k: int) -> bool:
        c = collections.Counter(nums)
        n = len(nums)
        m = n/k
        if m%1 != 0:
            return False
        while m != 0:
            x = k
            pre = min(i for i,v in c.items() if v > 0) -1 
            while x:
                if c[pre+1] <= 0:
                    return False
                else:
                    c[pre+1] -= 1
                    pre += 1
                    x -= 1
            m -= 1
        return True

优化:O(N)

class Solution:
    def isPossibleDivide(self, nums: List[int], k: int) -> bool:
        n=len(nums)
        if n%k:
            return False
        cnt=collections.Counter(nums)
        st=min(cnt)
        while len(cnt)>0:
            ntime=cnt[st]
            nst=-1
            for num in range(st,st+k):
                if cnt[num]<ntime:
                    return False
                elif cnt[num]==ntime:
                    cnt.pop(num)
                else:
                    cnt[num]-=ntime
                    if nst<0:
                        nst=num
            if nst<0 and len(cnt)>0:
                nst=min(cnt)
            st=nst
        return True

以上是关于leetcode-168周赛-1296-划分数字为连续数字的集合的主要内容,如果未能解决你的问题,请参考以下文章

Python|Leetcode《846》《1296》|一手顺子 划分数组为连续数字的集合

Python|Leetcode《846》《1296》|一手顺子 划分数组为连续数字的集合

leetcode-168周赛-1297-子串的最大出现次数

LeetCode第 30 场双周赛题解

Leetcode周赛 6020. 将数组划分成相等数对

leetcode-26双周赛-5399-数位成本和为目标值的最大数字