首页 > 其他 > 详细

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

时间:2019-12-23 11:09:25      阅读:103      评论:0      收藏:0      [点我收藏+]

题目如下:

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

 

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

原文:https://www.cnblogs.com/seyjs/p/12082579.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!