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

//思路:整理出每个数字有多少个,将其根据数字大小排序,

//外循环每次循环取第一个数作为一个集合的开始数字,内循环查找是否有递增的集合

public function isPossibleDivide($nums,$k){

    if(count($nums) % $k != 0) return false;

    $data = [];

    //每个数字映射有多少个

    foreach($nums as $v){

        $data[$v] = isset($data[$v])?$data[$v]+1:1;

    }

    //根据键排序

    ksort($data);

    while(!empty($data)){

        //每次将指针指向第一个元素,即键最小的元素

        reset($data);

        //取这个键的值

        $prv = key($data);

        //每次更新需要剔除的数量

        $n = $k;

        while($n){

            //当数组中有这个键值说明这个数的数量大于0

            if(isset($data[$prv])){

                //将数量减1

                $data[$prv]--;

                //要剔除的数量减一

                $n--;

                //如果这个数的数量为0,则剔除这个数

                if($data[$prv] == 0) unset($data[$prv]);

                //下次需要找到的数字

                $prv++;

            //没找到这个数,说明不存在连续递增的集合,则返回false

            }else{

                return false;

            }

}

}

    return true;

}



你可能感兴趣的:(1296. 划分数组为连续数字的集合)