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)
如果有帮助,这里有更多示例:
该问题可以通过对数组进行排序,计算重复项,然后验证连续序列来解决。
考虑示例 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] 结束