Это кажется довольно окольным способом определения последовательности.
Я полагаю, что один из ваших fl aws здесь:
// if current element is the starting
// element of a sequence
if (!S.contains(arr[i]-1))
{
Это определенно некорректно. Допустим, у вас есть входная последовательность {1,3,5,2,4,6}. В этом списке нет последовательностей из 2 или более. Тем не менее, входные данные от 2 до 6 будут проходить ваш тест S.contains(arr[i]-1)
, так как S HashSet содержит 1,2,3,4,5,6.
Вот то, что я считаю гораздо более простым способом найти самую длинную последовательность:
int longestLength = 0;
int longestStart = 0;
int currentStart = 0;
int currentLength = 1;
for(int i=1;i<arr.length;i++)
{
if (arr[i] == arr[i-1] + 1)
{
// this element is in sequence.
currentLength++;
if (currentLength > longestLength)
{
longestLength = currentLength;
longestStart = currentStart;
}
}
else
{
// This element is not in sequence.
currentStart = i;
currentLength = 1;
}
}
System.out.printlng(longestStart + ", " + longestLength);