首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找数组中的所有升序三重奏

查找数组中的所有升序三重奏
EN

Stack Overflow用户
提问于 2019-08-09 10:30:29
回答 2查看 306关注 0票数 1

我试图超越任意维数组中的所有升序三重奏。例如,如果我有一个类似于[1 2 3 4]的数组,我想获得[1 2 3] , [1 2 4] , [2 3 4]

下面是一个包含5个元素的简单“图形”示例:

箭头是用来迭代的索引,每一步都是找到的三重奏。

到目前为止,我已经实现了一个简单的排序算法,它将给出有序数组。

一旦我有了有序数组,我就会迭代3个可能的指针(或仅仅是索引),增加指针,从第三个元素开始,直到它到达数组的末尾。

一旦到达终点,我将增加第二个指针,并将第三个指针重置为指针2旁边的位置,以此类推。

代码语言:javascript
复制
array = [ 3 2 1 5 ];
array = sort(array);
//Now i should iterate over the 3 indexes, but i'm totally lost about how to place them 
for i=1:length(array-2)
    for j=2:length(array-1)
        for k=3:length(array)
         //storing triplet
        end
    end
end

现在,我能够迭代数组,并且可以提取所有的三胞胎,直到k索引到达数组的末尾为止。

问题是,一旦我到达终点,我必须增加j索引的起始点,并将k索引重置为接近第二个索引的位置。

为了说明清楚:一旦k到达终点,它将从3重新开始,而j也将为3,但在完成k的第一次迭代之后,我需要它们是j =3和k =4,依此类推(与i相比,这对于j也是有效的,查看图像以获得更清晰的解释)。

如何修正索引以正确提取三胞胎?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-09 10:33:22

在我看来,你的内心迭代是从外部迭代开始的:

代码语言:javascript
复制
for j=(i+1):length(array-1)
    for k=(j+1):length(array-1)

将第一个循环推广到其他循环。

票数 1
EN

Stack Overflow用户

发布于 2019-08-09 11:32:06

代码语言:javascript
复制
const arrayTotal = [3, 2, 1, 5];
let combinationArray = [];
arrayTotal.sort();
for (let i = 0; i < (arrayTotal.length - 2); i++) {
  for (let j = (i + 1); j < (arrayTotal.length - 1); j++) {
    for (let k = (j + 1); k < arrayTotal.length; k++) {
      combinationArray.push([arrayTotal[i], arrayTotal[j], arrayTotal[k]])
    }
  }
}
console.log(combinationArray);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57428196

复制
相关文章

相似问题

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