判断一个数字数组是否可以分成一组k个连续的数字

Sno*_*xxx 1 java arrays algorithm

给定一些数组 nums 和一个正整数 k,确定是否可以将这个数组分成 k 个连续数字的集合。

例子:

nums = [1,2,3,4] k = 2
Run Code Online (Sandbox Code Playgroud)

从 [1,2], [3, 4] 开始输出真

我的想法是数组 nums 的大小必须能被整数 k 整除。但是当我使用它作为测试时,我在这个测试用例中失败了:

[15,16,17,18,19,16,17,18,19,20,6,7,8,9,10,3,4,5,6,20] k = 5

我是真的,但答案是假的,我不知道为什么。有任何想法吗?

这是我的代码:

int n = nums.size();
if(n % k == 0)
    return true;

return false;
Run Code Online (Sandbox Code Playgroud)

如果有帮助,这里有更多示例:

在此处输入图片说明

use*_*109 6

该问题可以通过对数组进行排序,计算重复项,然后验证连续序列来解决。

考虑示例 2,其中 k=3 且数组为

[3,2,1,2,3,4,3,4,5,9,10,11]
Run Code Online (Sandbox Code Playgroud)

排序后:

[1,2,2,3,3,3,4,4,5,9,10,11]
Run Code Online (Sandbox Code Playgroud)

计算重复后(顶行是数组中唯一的数字,底行是每个数字的重复计数):

1 2 3 4 5 9 10 11
1 2 3 2 1 1  1  1
Run Code Online (Sandbox Code Playgroud)

现在检查序列。最小的数字是1,所以数组中必须存在序列[1,2,3],否则输出为false。1、2 和 3 都有非零计数,因此数组确实包含该序列。更新计数以删除该序列:

1 2 3 4 5 9 10 11
0 1 2 2 1 1  1  1
Run Code Online (Sandbox Code Playgroud)

现在 2 是具有非零计数的最小数字,因此下一个序列是 [2,3,4] 并且更新的计数是:

1 2 3 4 5 9 10 11
0 0 1 1 1 1  1  1
Run Code Online (Sandbox Code Playgroud)

以 [3,4,5] 和 [9,10,11] 结束