首页 > 编程语言 > 详细

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

时间:2019-12-23 23:25:40      阅读:98      评论:0      收藏:0      [点我收藏+]

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

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

 

找出所有不满足连续的情况返回false,所有不连续的情况都不满足,就是连续的了。

定义两个数组,一x[]个存后的nums数字,另一个y[]存对应数字的个数。

先看数字个数是否满足构成n个K长度的子集合,不能的话一定false,然后因为是连续的K个数,所以有x[i]+k-1 = =x[i+k-1],以此判断是否连续,

然后判断连续数字个数是否为0,为零的话则不连续,否则减1,判断下一个,直至K-1,

接着下一个判断。直至结束

class Solution {
    public boolean isPossibleDivide(int[] nums, int k) {
        int len = nums.length;
        if (len % k != 0){
            System.out.println("1");
            return false;

 

        }
        int x[] = new int[len+1];
        int y[] = new int[len];
        Arrays.sort(nums);
        int index = 0;
        x[0] = nums[0];
        y[0] = 1;
        for (int i = 1;i < len;i++){

 

            if (nums[i] == nums[i - 1]){
                y[index] = y[index]+1;

 

            }else {
                index++;
                x[index] = nums[i];
                y[index] = 1;
            }
        }
        for (int i = 0;x[i] != 0;i++){
            if (y[i] == 0){
                continue;
            }
            if (x[i]+(k-1) != x[i+(k-1)]){
                return false;
            }
            for (int j = 0;j < k;j++){
                if (y[i+j] == 0){

 

                    return false;
                }else {
                    y[i+j] = y[i+j]-1;

 

                }
            }
            if (y[i] != 0){
                i -= 1;
            }

 

        }
        return true;
    }
}

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

原文:https://www.cnblogs.com/ztabk/p/12088759.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!