Finding longest consecutive numbers in array
42 次查看(过去 30 天)
显示 更早的评论
Hello everyone,
This is somewhat of a silly question but I can't seem to figure it out. If I have an array of numbers what I want is to find the location of my longest consecutive numbers for example:
my arrary = [ 1999 2000 2001 2003 2004 2005 2006 2007];
I want my output to be = [ 4 5 6 7 8]; because that's the location of my longest consecutive numbers (2003-2007). I tried to find where difference is equal to 1 but then the result is [1 1 1 0 1 1 1 1] , it doesn't take the position of the last number which is 2007 here and even if I fix that problem also I'd still have to find the locations for the longest consecutive one's for the second scenario.
I could use some help in this,
Thank You!!!
0 个评论
采纳的回答
Stephen23
2018-1-27
编辑:Stephen23
2025-10-24,14:45
V = [1999,2000,2001,2003,2004,2005,2006,2007];
D = diff([0;diff(V(:))==1;0]);
B = find(D>0);
E = find(D<0);
[~,idx] = max(E-B);
idy = B(idx):E(idx)
4 个评论
Stephen23
2025-10-24,14:44
编辑:Stephen23
2025-10-24,14:49
@Martina: well spotted! I made a few changes, please check it!
longestConsecutive([2001,2002,2003,2004,2005,2006,2007,2009,2010]) % 1:7
longestConsecutive([1999,2001,2003,2004,2005,2006,2007,2009,2010]) % 3:7
longestConsecutive([1999,2001,2003,2004,2005,2006,2007,2008,2009]) % 3:9
longestConsecutive([2001,2002,2003,2004,2005,2006,2007,2008,2009]) % 1:9
longestConsecutive([2001,2003,2005,2007]) % none
function idy = longestConsecutive(inp)
D = diff([0;diff(inp(:))==1;0]);
B = find(D>0);
E = find(D<0);
[~,idx] = max(E-B);
idy = B(idx):E(idx);
end
As an alternative you could use something from FEX, for example
on the DIFF() of the vector.
更多回答(1 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 MATLAB Report Generator 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!