You need to enable JavaScript to run this app. for循环中实现数组索引按+5(或指定步长)跳转的方法(连续相同数字统计场景)
优惠活动
大模型
产品
解决方案
定价
更多

for循环中实现数组索引按+5(或指定步长)跳转的方法(连续相同数字统计场景)

连续5个相同数字的组数统计实现方案

核心问题

原有固定步长的for循环在检测到连续5个相同数字后,无法自动跳过已统计的元素,会以串内每个位置为起点重复检测同一段连续值,导致长串同值被重复计数。比如9个连续的8,原逻辑会依次从第1、2、3、4、5个8开始检测到符合条件的5连值,重复计5次,和预期的“每5个连续值计1组,9个连续值仅计2组”的规则不符。

目标逻辑规则

  • 以数组当前指针位置的数值为基准,向后检查连续4个元素是否和基准值完全一致
  • 若凑够5个连续相同值,计数器加1,直接将指针向后跳转5位,跳过已统计的整段元素,继续从跳转后的位置开始下一轮检查
  • 若检查中途发现不等值,仅将指针向后移动1位,从下一个元素位置重新开始检测
  • 当指针位置剩余元素不足5个时,直接终止遍历,输出最终统计的组数

通用算法流程

  1. 初始化变量:遍历指针ptr = 0,统计组数total = 0
  2. 循环条件:当ptr位置到数组末尾的元素总数≥5时持续执行
  3. 连续值检测:
    • 取ptr位置的数值为基准值,依次向后比对后续4个位置的元素
    • 若所有位置元素和基准值一致:total +=1,执行ptr +=5完成跳步
    • 若中途出现不一致元素:执行ptr +=1,移动到下一个位置
  4. 循环终止后返回total值

参考实现代码

Python 版本

def count_5_consecutive_groups(data):
    total = 0
    ptr = 0
    data_len = len(data)
    while ptr <= data_len - 5:
        base_val = data[ptr]
        is_match = True
        for step in range(1, 5):
            if data[ptr + step] != base_val:
                is_match = False
                break
        if is_match:
            total += 1
            ptr += 5
        else:
            ptr += 1
    return total

Matlab 版本(适配原有代码逻辑)

total = 0;
ptr = 1;
data_len = length(data);
while ptr <= data_len - 4
    base_val = data(ptr);
    is_match = true;
    for step = ptr+1:ptr+4
        if data(step) ~= base_val
            is_match = false;
            break;
        end
    end
    if is_match
        total = total + 1;
        ptr = ptr + 5;
    else
        ptr = ptr + 1;
    end
end
disp(total);

示例校验

  • 数组1(9个连续8+3个连续9+零散值):检测到前5个8计1组,指针跳转到第6个8位置,再次检测到后续4个连续8凑够5个值计第2组,剩余元素凑不够连续5个值,最终统计2组,符合预期
  • 数组2:6个连续8计1组、8个连续9计1组、5个连续5计1组、5个连续2计1组,总组数4,符合预期
  • 数组3:10个连续8计2组、5个连续6计1组,总组数3,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 18:15:04