1296. 划分数组为连续数字的集合

给你一个整数数组 nums 和一个正整数 k,请你判断是否可以把这个数组划分成一些由 k 个连续数字组成的集合。
如果可以,请返回 true;否则,返回 false。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/divide-array-in-sets-of-k-consecutive-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

class Solution {
    public boolean isPossibleDivide(int[] nums, int k) {
        if (nums == null || nums.length == 0) {
            return true;
        }
        if (nums.length % k != 0) {
            return false;
        }
        Arrays.sort(nums);
        Map<Integer, Integer> numMap = new HashMap<>();
        for (int num : nums) {
            numMap.put(num, numMap.getOrDefault(num, 0) + 1);
        }
        for (int num : nums) {
            if (!numMap.containsKey(num)) {
                continue;
            }
            for (int i = 0; i < k; ++i) {
                int need = num + i;
                int leave = numMap.getOrDefault(need, 0);
                if (leave == 0) {
                    return false;
                }
                if (leave == 1) {
                    numMap.remove(need);
                } else {
                    numMap.put(need, leave - 1);
                }
            }
        }
        return true;
    }
}
posted @ 2022-01-24 17:14  Tianyiya  阅读(51)  评论(0)    收藏  举报