Welcome to Subscribe On Youtube
1296. Divide Array in Sets of K Consecutive Numbers
Description
Given an array of integers nums
and a positive integer k
, check whether it is possible to divide this array into sets of k
consecutive numbers.
Return true
if it is 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 = [1,2,3,4], k = 3 Output: false Explanation: Each array should be divided in subarrays of size 3.
Constraints:
1 <= k <= nums.length <= 105
1 <= nums[i] <= 109
Note: This question is the same as 846: https://leetcode.com/problems/hand-of-straights/
Solutions
-
class Solution { public boolean isPossibleDivide(int[] nums, int k) { Map<Integer, Integer> cnt = new HashMap<>(); for (int v : nums) { cnt.put(v, cnt.getOrDefault(v, 0) + 1); } Arrays.sort(nums); for (int v : nums) { if (cnt.containsKey(v)) { for (int x = v; x < v + k; ++x) { if (!cnt.containsKey(x)) { return false; } cnt.put(x, cnt.get(x) - 1); if (cnt.get(x) == 0) { cnt.remove(x); } } } } return true; } }
-
class Solution { public: bool isPossibleDivide(vector<int>& nums, int k) { unordered_map<int, int> cnt; for (int& v : nums) ++cnt[v]; sort(nums.begin(), nums.end()); for (int& v : nums) { if (cnt.count(v)) { for (int x = v; x < v + k; ++x) { if (!cnt.count(x)) { return false; } if (--cnt[x] == 0) { cnt.erase(x); } } } } return true; } };
-
class Solution: def isPossibleDivide(self, nums: List[int], k: int) -> bool: cnt = Counter(nums) for v in sorted(nums): if cnt[v]: for x in range(v, v + k): if cnt[x] == 0: return False cnt[x] -= 1 if cnt[x] == 0: cnt.pop(x) return True
-
func isPossibleDivide(nums []int, k int) bool { cnt := map[int]int{} for _, v := range nums { cnt[v]++ } sort.Ints(nums) for _, v := range nums { if _, ok := cnt[v]; ok { for x := v; x < v+k; x++ { if _, ok := cnt[x]; !ok { return false } cnt[x]-- if cnt[x] == 0 { delete(cnt, x) } } } } return true }