首页 > 解决方案 > 将数字数组拆分为具有接近值的几个部分

问题描述

示例数组:

[
    1, 2, 3, 10, 11, 12, 13, 14, 20, 21, 22, 30
]

我需要将它分成三个具有接近值的部分

[1, 2, 3]
[10, 11, 12, 13, 14]
[20, 21, 22, 30]

数组可以不同,但​​逻辑是一样的。任何人都可以提出一些方法(数学模型、理论、分布等)来做到这一点吗? 在此处输入图像描述

标签: arrayscollections

解决方案


由于源数组中的所有值都已经排序,这使得它变得非常容易。

在您的示例中,我会说有 3 个解决方案。

solution 1: [1, 2, 3]
solution 2: [10, 11, 12, 13, 14]
solution 3: [20, 21, 22, 30]

每个解决方案都是一个数组。我们将使用另一个数组来包含所有这些解决方案。除非您的源数组为空,否则您将至少有 1 个包含至少 1 个值的解决方案。

从源中获取第一个值并开始创建解决方案 1。现在循环遍历源中的剩余值。如果下一个值与当前解决方案中添加的最新值连续,则将其添加到该解决方案集中。如果没有,请开始创建新的解决方案。

source = [1, 2, 3, 10, 11, 12, 13, 14, 20, 21, 22, 30];
solutions = new Array(1);

index = 0;
solutions[index] = new Array();
solutions[index].push(source[0]);

j = 0;
for (i = 1; i < source.length; i++){

    if (solutions[index][j]+1 == source[i]){
        solutions[index].push(source[i]);
        j++
    }else{
        solutions.push(new Array());
        index++;
        solutions[index].push(source[i]);
        j = 0;
    }
}

console.log(solutions);

推荐阅读