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

如何按规则分割含5个数字的已排序数组?

解决已排序5元素数组的分组问题

我来帮你搞定这个分组需求!首先咱们明确下规则(结合你给的例子):

  • 对于已排序的5个数字数组,只要存在连续的3个相同数字,就把这3个归为一组,剩下的每个数字单独成单元素数组;
  • 如果没有连续3个相同的数字,所有数字都各自成单元素数组。

你的原代码问题在于:用for循环每次i递增1,处理完一组3个元素后,会继续检查下一个位置的元素,导致重复分组,而且没考虑到数组末尾的边界情况(比如i+2超出数组长度)。

可行的解决方案代码

这里用while循环手动控制遍历指针,避免重复处理,同时处理边界:

function groupSortedArray(table) {
  const grouped = [];
  let i = 0;
  const length = table.length;
  
  while (i < length) {
    // 检查当前位置开始是否有连续3个相同元素(确保不越界)
    if (i + 2 < length && table[i] === table[i+1] && table[i] === table[i+2]) {
      // 截取3个元素作为一组
      grouped.push(table.slice(i, i + 3));
      i += 3; // 跳过已处理的3个元素
    } else {
      // 单个元素成组
      grouped.push([table[i]]);
      i += 1;
    }
  }
  
  return grouped;
}

测试验证

咱们用你给的例子测试下:

  1. 输入[1,1,1,1,1] → 输出[[1,1,1],[1],[1]] ✅
  2. 输入[1,2,2,2,6] → 输出[[1],[2,2,2],[6]] ✅
  3. 输入[1,2,2,4,5] → 输出[[1],[2],[2],[4],[5]] ✅
  4. 输入[1,1,1,2,2] → 输出[[1,1,1],[2],[2]] ✅
  5. 输入[1,1,2,2,2] → 输出[[1],[1],[2,2,2]] ✅

代码逻辑说明

  • 因为数组是已排序的,相同元素必然连续,所以只需检查当前位置开始的三个元素是否相同;
  • 用i + 2 < length确保不会越界访问数组;
  • 处理完一组3个元素后,直接让i +=3跳过已处理的元素,避免重复分组;
  • 剩下不足3个的元素,逐个单独成组。

内容的提问来源于stack exchange,提问作者Peter B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:52:12