Medium
You are given an integer array nums
and an integer k
.
Your task is to determine whether it is possible to partition all elements of nums
into one or more groups such that:
k
distinct elements.nums
must be assigned to exactly one group.Return true
if such a partition is possible, otherwise return false
.
Example 1:
Input: nums = [1,2,3,4], k = 2
Output: true
Explanation:
One possible partition is to have 2 groups:
[1, 2]
[3, 4]
Each group contains k = 2
distinct elements, and all elements are used exactly once.
Example 2:
Input: nums = [3,5,2,2], k = 2
Output: true
Explanation:
One possible partition is to have 2 groups:
[2, 3]
[2, 5]
Each group contains k = 2
distinct elements, and all elements are used exactly once.
Example 3:
Input: nums = [1,5,2,3], k = 3
Output: false
Explanation:
We cannot form groups of k = 3
distinct elements using all values exactly once.
Constraints:
1 <= nums.length <= 105
1 <= nums[i] <= 105
1 <= k <= nums.length
public class Solution {
public boolean partitionArray(int[] nums, int k) {
int n = nums.length;
if (n % k != 0) {
return false;
}
int max = 0;
for (int x : nums) {
max = Math.max(max, x);
}
int[] count = new int[max + 1];
int limit = n / k;
for (int x : nums) {
if (++count[x] > limit) {
return false;
}
}
return true;
}
}