使用matlab查找大小为1xn的随机数组中连续数字的最长序列的大小

时间:2017-10-09 18:53:28

标签: arrays matlab sequence

我想使用Matlab找到大小为1xn的随机数组中连续数字的最长序列的大小。我知道有两种方法可以做到这一点:1)使用循环和2)使用Matlab函数,例如:找到,但我不确定如何不同时使用它们?

E.G。 [1 2 3 5 8 9 10 11 12 13 14 17]

其中最长的序列是10 11 12 13 14,其大小为5。

我试过了,但它没有用:

function [start, finish] = longest(sequence)

x = diff(t)==1;

f = find([false,x]~=[x,false]);

g = find(f(2:2:end)-f(1:2:end-1)>=N,1,'first');

1 个答案:

答案 0 :(得分:1)

您的变量不匹配,但假设all(t == sequence)您处于正确的轨道上。您希望通过执行第二次diff来区分每次运行的开始和结束。

% Mark all sequences
x = diff(sequence) == 1;

% Take the second derivative to find the edges
xx = diff([false, x, false]);

% This gives matched pairs of indexes for each block
initial = find(xx == 1);
final = find(xx == -1);

% Get the block length
blockLength = final - initial;

% Get the max length
[~, idx] = max(blockLength);

% Return the indices
start = initial(idx);
finish = final(idx);

测试结果为start = 5finish = 11。如果您还要返回块长度,请将~替换为您的变量名称