You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中将数组切割为指定数量k个subarray子数组的问题修复

问题根因

你当前的代码逻辑是先固定每个子数组的最大长度为 chunks = Math.ceil(数组长度/k),再按这个长度反向计算拆分的段数,这个逻辑只能保证子数组数量≤k,无法保证刚好等于k。
举你给出的示例:数组长度为7,k=5,计算得到的chunks为2,按步长2遍历数组只能得到4个起点,最终返回4个子数组,自然不符合要求。

修复方案

要实现严格返回k个子数组,通用的拆分规则是:

  • 先计算基础长度 base = arr.length / k
  • 再计算余数 remain = arr.length % k
  • 前 remain 个子数组长度为 base + 1,剩余 k - remain 个子数组长度为 base,刚好凑齐k个,所有元素无遗漏也不会重复。
修复后代码
public static int[][] slice(int[] arr, int k) {
    int arrLength = arr.length;
    // 边界处理:k不能小于1,不能大于数组长度,可根据需求调整异常逻辑
    if (k <= 0 || k > arrLength) {
        throw new IllegalArgumentException("k的取值范围为1到数组长度之间");
    }
    int base = arrLength / k;
    int remain = arrLength % k;
    
    int[][] output = new int[k][];
    int currentPos = 0;
    for (int i = 0; i < k; i++) {
        int chunkSize = base + (i < remain ? 1 : 0);
        output[i] = Arrays.copyOfRange(arr, currentPos, currentPos + chunkSize);
        currentPos += chunkSize;
    }
    return output;
}
效果验证

针对你给出的示例:输入数组{1,2,3,4,5,6,7}、k=5,调用修复后方法返回的结果为[[1,2], [3,4], [5], [6], [7]],刚好满足5个子数组的要求。

内容的提问来源于stack exchange,提问作者asprog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:36:03