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

Topics are as follows:

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

Problem-solving ideas: starting from the smallest digital nums, turn back to find k-1 digital, find a deleted from nums out a number corresponding until nums is empty, or can not find the conditions in line with figures so far.

code show as below:

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

 

Guess you like

Origin www.cnblogs.com/seyjs/p/12082579.html
Recommended