我正在尝试提取任意维度数组中的所有升序三元组。例如,如果我有一个类似 [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,但我需要它们是 j
= 3 和 k
= 4 在 k
的第一次迭代之后完成等等(这也适用于 j
与 i
相比,查看图片以获得更清晰的解释)。
如何修复索引以正确提取三元组?
最佳答案
在我看来你的内部迭代是在你的外部迭代之后开始的:
for j=(i+1):length(array-1)
for k=(j+1):length(array-1)
将第一个循环推广到其余循环。
关于arrays - 查找数组中的所有升序三元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57428196/