我想使用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');
答案 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 = 5
,finish = 11
。如果您还要返回块长度,请将~
替换为您的变量名称