Finding longest consecutive numbers in array

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!!!

 Respuesta aceptada

Stephen23
Stephen23 el 27 de En. de 2018
Editada: Stephen23 el 24 de Oct. de 2025
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)
idy = 1×5
4 5 6 7 8
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

4 comentarios

John Doe
John Doe el 28 de En. de 2018
Thank You!!!!
Note that this code does not work well in some cases (maybe when the first number is not part of a sequence of consecutive numbers):
V = [1999,2001,2003,2004,2005,2006,2007];
D = diff(diff(V)==1);
B = find([true,D>0]);
E = find([D<0,true])+1;
[~,idx] = max(E-B);
B(idx):E(idx)
ans = 1×7
1 2 3 4 5 6 7
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
Stephen23
Stephen23 el 24 de Oct. de 2025
Editada: Stephen23 el 24 de Oct. de 2025
@Martina: well spotted! I made a few changes, please check it!
longestConsecutive([2001,2002,2003,2004,2005,2006,2007,2009,2010]) % 1:7
ans = 1×7
1 2 3 4 5 6 7
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
longestConsecutive([1999,2001,2003,2004,2005,2006,2007,2009,2010]) % 3:7
ans = 1×5
3 4 5 6 7
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
longestConsecutive([1999,2001,2003,2004,2005,2006,2007,2008,2009]) % 3:9
ans = 1×7
3 4 5 6 7 8 9
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
longestConsecutive([2001,2002,2003,2004,2005,2006,2007,2008,2009]) % 1:9
ans = 1×9
1 2 3 4 5 6 7 8 9
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
longestConsecutive([2001,2003,2005,2007]) % none
ans = 1×0 empty double row vector
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.
Martina
Martina el 24 de Oct. de 2025
Thank you so much!! <3

Iniciar sesión para comentar.

Más respuestas (1)

Categorías

Más información sobre MATLAB Report Generator en Centro de ayuda y File Exchange.

Preguntada:

el 27 de En. de 2018

Comentada:

el 24 de Oct. de 2025

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by