-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1296.IsPossibleDivide.cs
51 lines (46 loc) · 1.55 KB
/
1296.IsPossibleDivide.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// 1296. Divide Array in Sets of K Consecutive Numbers
// 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
public class Solution {
public bool IsPossibleDivide(int[] nums, int k) {
if(nums.Length%k != 0)
return false;
Array.Sort(nums);
Dictionary<int,int> freq = new();
foreach(var num in nums){
if(freq.ContainsKey(num))
freq[num]++;
else
freq[num] = 1;
}
while(freq.Any()){
int num = freq.First().Key;
for(int i = 0; i < k; i++){
int currNum = num + i;
if(freq.ContainsKey(currNum)){
freq[currNum]--;
if(freq[currNum] == 0)
freq.Remove(currNum);
}
else
return false;
}
}
return true;
}
}