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

如何对长度可变(3-8)的数组实现连续三相邻元素匹配校验?

嘿,这个需求其实很好实现,核心就是遍历数组中所有合法的连续三元组,逐一检查它们的属性是否一致就行。我给你梳理下思路和具体代码:

核心思路

咱们的目标是检查数组里有没有「连续三个相邻索引」的元素属性相同,而且不考虑环形情况,那关键点就是:

  • 遍历的起始索引从0开始,终止索引要保证i+2不超出数组范围(也就是最大的i是数组长度-3)
  • 只要找到任意一组满足条件的三元组,直接返回true,不用继续遍历(提升效率)
  • 如果遍历完所有可能的三元组都没符合的,返回false

具体Java代码实现

假设你的Block类里有一个用来判断属性的方法,比如getProperty()(你可以替换成自己实际要用的属性名或方法),通用方法可以这么写:

public boolean hasConsecutiveThreeSame(Block[] circles) {
    // 防御性判断:数组为空或者长度不足3,直接返回false
    if (circles == null || circles.length < 3) {
        return false;
    }
    
    // 遍历所有可能的连续三元组起始索引
    for (int i = 0; i <= circles.length - 3; i++) {
        Block first = circles[i];
        Block second = circles[i+1];
        Block third = circles[i+2];
        
        // 检查三个元素的目标属性是否相同
        // 注意:如果属性是引用类型,要考虑null的情况,这里假设Block对象不会为null
        if (first.getProperty().equals(second.getProperty()) 
            && second.getProperty().equals(third.getProperty())) {
            return true;
        }
    }
    
    // 所有三元组都不满足,返回false
    return false;
}

代码说明

  1. 边界处理:先判断数组是否为空或者长度小于3,直接返回false,避免数组越界异常,也符合你的场景(数组长度是3-8,不过加这个判断更健壮)
  2. 遍历范围:i <= circles.length - 3保证了i+2不会超过数组最后一个索引。比如数组长度为3时,i只能是0,刚好检查唯一的一组三元组;数组长度为7时,i最大是4,对应的三元组是4、5、6,覆盖所有合法的连续组合
  3. 属性比较:这里用equals()方法比较属性,如果是基本数据类型(比如int),直接用==就行,你可以根据实际属性类型调整
  4. 提前返回:一旦找到符合条件的三元组就立即返回true,不用遍历完整个数组,优化性能

调用示例

在你的代码里,初始化完circles数组后,直接调用这个方法就行:

// 初始化数组后
boolean hasSameTriplet = hasConsecutiveThreeSame(circles);

这个方法完全适配数组长度3到7(甚至8也能正常工作,因为逻辑是通用的),完美符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:45:53