1422. Divide Array In Sets Of K Consecutive Numbers¶
Difficulty: Medium
LeetCode Problem View on GitHub
1422. Divide Array in Sets of K Consecutive Numbers
Medium
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 <= 1051 <= nums[i] <= 109
Note: This question is the same as 846: https://leetcode.com/problems/hand-of-straights/
Solution¶
class Solution {
public boolean isPossibleDivide(int[] nums, int k) {
int n = nums.length;
if (n % k != 0)
return false;
HashMap<Integer, Integer> map = new HashMap<>();
TreeSet<Integer> set = new TreeSet<>();
for (int ele : nums) {
set.add(ele);
map.put(ele, map.getOrDefault(ele, 0) + 1);
}
while (map.size() > 0) {
int current = set.first();
for (int i = 0; i < k; i++) {
if (!map.containsKey(current))
return false;
else {
map.put(current, map.getOrDefault(current, 0) -1);
if (map.getOrDefault(current, 0) == 0) {
map.remove(current);
set.remove(current);
}
}
current++;
}
}
return true;
}
}
Complexity Analysis¶
- Time Complexity:
O(?) - Space Complexity:
O(?)
Approach¶
Detailed explanation of the approach will be added here