首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数字数组拆分为几个部分,并使用接近的值

将数字数组拆分为几个部分,并使用接近的值
EN

Stack Overflow用户
提问于 2020-10-09 21:49:13
回答 2查看 30关注 0票数 0

数组示例:

代码语言:javascript
复制
[
    1, 2, 3, 10, 11, 12, 13, 14, 20, 21, 22, 30
]

我需要将它分成三个部分,并使用接近的值

代码语言:javascript
复制
[1, 2, 3]
[10, 11, 12, 13, 14]
[20, 21, 22, 30]

数组可以不同,但逻辑是相同的。有没有人可以提出一些方法(数学模型、理论、分布等)来做这件事?

EN

回答 2

Stack Overflow用户

发布于 2020-10-09 22:08:21

术语“使用封闭值拆分数组”是不明确的。

您可以检查两个连续值之间的差值是否在特定范围内。如果差值在指定范围内,则可以将当前值添加到当前子列表中。否则,您需要添加到下一个列表中:

代码语言:javascript
复制
prev = 0
cnt = 1

for elm in A:
    if elm - prev not in range(0, 5):
        cnt += 1
    add_to_sub(cnt, elm)
    prev = elm

cnt变量用于确定我们应该添加哪个子列表的值。对于这个问题,我将范围设置在0-5之间。这意味着如果差值大于或等于5,则将当前值添加到下一个子列表。

代码:

代码语言:javascript
复制
A = [1, 2, 3, 10, 11, 12, 13, 14, 20, 21, 22, 30]

sub1 = []
sub2 = []
sub3 = []

prev = 0
cnt = 1


def add_to_sub(count, element):
    if count == 1:
        sub1.append(element)
    elif count == 2:
        sub2.append(element)
    else:
        sub3.append(element)


for elm in A:
    if elm - prev not in range(0, 5):
        cnt += 1
    add_to_sub(cnt, elm)
    prev = elm

print(sub1)
print(sub2)
print(sub3)

结果:

代码语言:javascript
复制
[1, 2, 3]
[10, 11, 12, 13, 14]
[20, 21, 22, 30]
票数 0
EN

Stack Overflow用户

发布于 2020-10-09 23:56:34

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

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

代码语言:javascript
复制
solution 1: [1, 2, 3]
solution 2: [10, 11, 12, 13, 14]
solution 3: [20, 21, 22, 30]

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

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

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64281409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档