分割配列を連続サブシーケンスにする

759 ワード

//     nums       10000  
    public boolean isPossible(int[] nums) {
        int[] counts = new int[20000];
        int[] need = new int[20000];

        for (int i = 0; i < nums.length; i ++) {
            //         
            nums[i] += 10000;
            counts[nums[i]] ++;
        }

        for (int n : nums) {
            if (counts[n] == 0) continue;

            if (need[n] > 0){
                need[n] --;
                need[n + 1] ++;
            } else if (counts[n + 1] > 0 && counts[n + 2] > 0){
                counts[n + 1] --;
                counts[n + 2] --;
                need[n + 3] ++;
            } else return false;
            counts[n] --;
        }
        return true;
    }