我有以下列表中找到最長的序列:在列表<int>
List<int> days = new List<int> { 1, 4, 5, 6, 7, 8, 20, 24, 25, 26, 30 };
我想要得到的最長序列的開始和結束號碼。對於上面的例子,我應該得到(4,8)。如果兩個序列的長度相同,我想要第一個序列。
注意:該列表將始終具有遞增順序的數字。
到目前爲止,我已經試過這樣:
List<Tuple<int, int>> seqs = new List<Tuple<int, int>>();
int _start = 0;
for (int i = 0; i <= days.Count; i++)
{
if (i == 0)
{
_start = days[i];
continue;
}
if (i < days.Count)
{
if (days[i] == days[i - 1] + 1)
continue;
else
{
seqs.Add(new Tuple<int, int>(_start, days[i - 1]));
_start = days[i];
}
}
else
{
seqs.Add(new Tuple<int, int>(_start, days[i - 1]));
}
}
var largestSeq = seqs
.OrderByDescending(s => s.Item2 - s.Item1)
.FirstOrDefault();
@CuongLe在上面的列表中,'4,5,6,7,8'是最長的序列,4是第一個,8是序列中的最後一個。 –
他想找到最長的數字序列,在他的例子中,最長的連續數字序列是4/5/6/7/8 – Phill
你真的不需要序列列表。您所需要的只是迄今爲止發現的最長序列的起始點和長度,以及* current *序列的開始。當前序列結束後,將其與目前爲止發現的最長時間進行比較,如果需要更新。 –