LeetCode 1296. 划分数组为连续数字的集合

作者: freesan44 | 来源:发表于2020-06-11 10:18 被阅读0次

    题目

    给你一个整数数组 nums 和一个正整数 k,请你判断是否可以把这个数组划分成一些由 k 个连续数字组成的集合。
    如果可以,请返回 True;否则,返回 False。

    示例 1:
    
    输入:nums = [1,2,3,3,4,4,5,6], k = 4
    输出:true
    解释:数组可以分成 [1,2,3,4] 和 [3,4,5,6]。
    示例 2:
    
    输入:nums = [3,2,1,2,3,4,3,4,5,9,10,11], k = 3
    输出:true
    解释:数组可以分成 [1,2,3] , [2,3,4] , [3,4,5] 和 [9,10,11]。
    示例 3:
    
    输入:nums = [3,3,2,2,1,1], k = 3
    输出:true
    示例 4:
    
    输入:nums = [1,2,3,4], k = 3
    输出:false
    解释:数组不能分成几个大小为 3 的子数组。
    

    提示:

    1 <= nums.length <= 10^5
    1 <= nums[i] <= 10^9
    1 <= k <= nums.length

    解题思路

    class Solution:
        def isPossibleDivide(self, nums: [int], k: int) -> bool:
            #用remove实现
            # if len(nums)%k != 0: return False
            # nums.sort()
            # while len(nums) != 0:
            #     tempNum = nums[0]
            #     for i in range(k):
            #         try:
            #             nums.remove(tempNum+i)
            #         except:
            #             return False
            # return True
            #用Counter内置函数实现
            if len(nums)%k != 0: return False
            nums.sort()
            import collections
            counter = collections.Counter(nums)
            counterNum = 0
            for num in nums:
                if counter[num] == 0:continue
                for i in range(k):
                    counter[num+i] -= 1
                    if counter[num+i] < 0:return False
                    counterNum += 1
            if counterNum != len(nums):return False
            return True
    

    相关文章

      网友评论

        本文标题:LeetCode 1296. 划分数组为连续数字的集合

        本文链接:https://www.haomeiwen.com/subject/ipivtktx.html