В Java:
int [] myArray = {5,-11,2,3,14,5,-14,2};
int downSequence = 1;
int longestDownSequence = 1;
for(int i = 1; i < myArray.length; i++) {
if(myArray[i] <= myArray[i-1]) downSequence++;
else {
if(downSequence > longestDownSequence)
longestDownSequence = downSequence;
downSequence = 1;
}
}
if(downSequence > longestDownSequence)
longestDownSequence = downSequence;
System.out.println(longestDownSequence);
Поскольку вы просите быстрый или более высокой производительности, только проверить на самый длинный вниз последовательности непосредственно перед сбросом счетчика , Никогда на каждой итерации. Тем не менее, вы должны снова проверить после цикла, если самая длинная последовательность находится в конце массива.
Вы уверены, что элементы подпоследовательности обязательно являются смежными? Потому что это изменит ответ. См. Проблему [Наибольшая возрастающая подпоследовательность] (http://en.wikipedia.org/wiki/Longest_increasing_subsequence). –
похоже, что они должны быть смежными, чтобы считаться последовательностью? – gtrak
Зачем вам нужен самый быстрый способ? –