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

如何实现整数列表按相邻元素差值小于10分组为子列表的逻辑

整数列表按相邻元素差值分组的实现方案

问题描述

输入有序整数列表:

List<Integer> integerList = [1,2,3,4,30,31,50,51,100];

期望输出分组后的列表(子列表中相邻元素差值小于10):

List<List<Integer>> subLists = [[1,2,3,4],[30,31],[50,51],[100]];

核心实现逻辑

基于输入列表为升序排列的前提,遍历过程中维护当前子列表,步骤如下:

  • 若输入列表为空,直接返回空结果
  • 初始化第一个子列表,将原列表第一个元素加入
  • 从第二个元素开始遍历:
    • 取当前元素与当前子列表的最后一个元素计算差值
    • 若差值小于10,将当前元素加入当前子列表
    • 若差值大于等于10,新建一个子列表并加入当前元素,同时将新子列表加入结果列表
  • 遍历完成后,结果列表即为所需分组

代码示例(Java)

import java.util.ArrayList;
import java.util.List;

public class IntegerGrouping {
    public static void main(String[] args) {
        List<Integer> integerList = List.of(1, 2, 3, 4, 30, 31, 50, 51, 100);
        List<List<Integer>> subLists = new ArrayList<>();

        if (integerList.isEmpty()) {
            System.out.println(subLists);
            return;
        }

        List<Integer> currentSubList = new ArrayList<>();
        currentSubList.add(integerList.get(0));
        subLists.add(currentSubList);

        for (int i = 1; i < integerList.size(); i++) {
            int currentNum = integerList.get(i);
            int lastNum = currentSubList.get(currentSubList.size() - 1);

            if (currentNum - lastNum < 10) {
                currentSubList.add(currentNum);
            } else {
                currentSubList = new ArrayList<>();
                currentSubList.add(currentNum);
                subLists.add(currentSubList);
            }
        }

        System.out.println(subLists);
    }
}

补充说明

如果输入列表是无序的,需要先对列表进行升序排序,再执行上述分组逻辑,否则无法保证分组符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:55:42