如何实现整数列表按相邻元素差值小于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
相关产品推荐
相关产品推荐

