给你一个整数数组 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