/** 1296. 划分数组为连续数字的集合
* @author 作者 Your-Name:
* @version 创建时间:2020年2月24日 上午10:22:34
* 给你一个整数数组 nums 和一个正整数 k,请你判断是否可以把这个数组划分成一些由 k 个连续数字组成的集合。
如果可以,请返回 True;否则,返回 False。
示例 1:
输入:nums = [1,2,3,3,4,4,5,6], k = 4
输出:true
解释:数组可以分成 [1,2,3,4] 和 [3,4,5,6]。
示例 2:
输入:nums = [3,2,1,2,3,4,3,4,5,9,10,11], k = 3
输出:true
解释:数组可以分成 [1,2,3] , [2,3,4] , [3,4,5] 和 [9,10,11]。
示例 3:
输入:nums = [3,3,2,2,1,1], k = 3
输出:true
示例 4:
输入:nums = [1,2,3,4], k = 3
输出:false
解释:数组不能分成几个大小为 3 的子数组。
提示:
1 <= nums.length <= 10^5
1 <= nums[i] <= 10^9
1 <= k <= nums.length
*/
public class huafenshuzhuwielianxushuzijihe {
public boolean isPossibleDivide(int[] nums, int k) {
if(nums.length%k!=0)
return false;
if(k==1)
return true;
Arrays.sort(nums);
Map<Integer,Integer> hsm = new HashMap<Integer,Integer>();
for(int num:nums)
{
hsm.put(num, hsm.getOrDefault(num, 0)+1);
}
for(int num:nums)
{
int a = num;
int b = num+k-1;
if(hsm.get(num)!=0)
{
for(int i=a;i<=b;i++)
{
Integer v = hsm.get(i);
if(v!=null&&v>0)
{
hsm.put(i, v-1);
}
else
return false;
}
}
}
return true;
}
}