我试图超越任意维数组中的所有升序三重奏。例如,如果我有一个类似于[1 2 3 4]的数组,我想获得[1 2 3] , [1 2 4] , [2 3 4]
下面是一个包含5个元素的简单“图形”示例:

箭头是用来迭代的索引,每一步都是找到的三重奏。
到目前为止,我已经实现了一个简单的排序算法,它将给出有序数组。
一旦我有了有序数组,我就会迭代3个可能的指针(或仅仅是索引),增加指针,从第三个元素开始,直到它到达数组的末尾。
一旦到达终点,我将增加第二个指针,并将第三个指针重置为指针2旁边的位置,以此类推。
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也是有效的,查看图像以获得更清晰的解释)。
如何修正索引以正确提取三胞胎?
发布于 2019-08-09 10:33:22
在我看来,你的内心迭代是从外部迭代开始的:
for j=(i+1):length(array-1)
for k=(j+1):length(array-1)将第一个循环推广到其他循环。
发布于 2019-08-09 11:32:06
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);
https://stackoverflow.com/questions/57428196
复制相似问题