【leetcode】1296. Divide Array in Sets of K Consecutive Numbers

题目如下:

Given an array of integers nums and a positive integer k, find whether it's possible to divide this array into sets of k consecutive numbers
Return True if its possible otherwise return False.

Example 1:

Input: nums = [1,2,3,3,4,4,5,6], k = 4
Output: true
Explanation: Array can be divided into [1,2,3,4] and [3,4,5,6].

Example 2:

Input: nums = [3,2,1,2,3,4,3,4,5,9,10,11], k = 3
Output: true
Explanation: Array can be divided into [1,2,3] , [2,3,4] , [3,4,5] and [9,10,11].

Example 3:

Input: nums = [3,3,2,2,1,1], k = 3
Output: true

Example 4:

Input: nums = [1,2,3,4], k = 3
Output: false
Explanation: Each array should be divided in subarrays of size 3. 

Constraints:

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

解题思路:从nums中最小的数字开始,依次往后找k-1个数字,找到一个就从nums删除掉对应的一个数字,直到nums为空,或者找不到符合条件的数字为止。

代码如下:

class Solution(object):
    def isPossibleDivide(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: bool
        """
        import bisect
        nums.sort()
        while len(nums) > 0:
            head = nums.pop(0)
            tk = k - 1
            val = head + 1
            while tk > 0:
                inx = bisect.bisect_left(nums,val)
                if inx >= 0 and inx < len(nums) and nums[inx] == val:
                    tk -= 1
                    val += 1
                    del nums[inx]
                    continue
                return False
        return tk == 0

猜你喜欢

转载自www.cnblogs.com/seyjs/p/12082579.html