2013-09-25 6 views
6

Я не прошу кого-то решить это для меня, мне просто нужно немного толкнуть, потому что у меня нет никакой земной идеи о том, с чего начать. Все, что я знаю, это то, что я должен реализовывать коллекции в этом и иметь вид.Сортировка ArrayList самая длинная последовательность

Напишите метод longestSortedSequence, который возвращает длину самой длинной отсортированной последовательности в списке целых чисел. Например, если переменная называется список хранит следующую последовательность значений:

[1, 3, 5, 2, 9, 7, -3, 0, 42, 308, 17] 

тогда вызов: list.longestSortedSequence() возвращает значение 4, потому что это длина самой длинной отсортированной последовательности в пределах этого списка (последовательность -3, 0, 42, 308). Если список пуст, ваш метод должен вернуть 0. Обратите внимание, что для непустого списка метод всегда будет возвращать значение не менее 1, потому что любой отдельный элемент представляет собой отсортированную последовательность.

Assume you are adding to the ArrayIntList class with following fields: 

public class ArrayIntList 
{ 
    private int[] elementData; 
    private int size; 

    // your code goes here 
} 
+6

+1 за то, что вы не просили ответа на ложь! –

+1

Печально, что те, кто считает комментарий @musical_coder полезным, не все на самом деле повышают. – allprog

ответ

1

Задумывались ли вы о циклах for и if else? Надеюсь, это не уйдет. подумайте об одном элементе за раз.

+1

Это может быть слишком загадочно :) Опиши в терминах алгоритма, а не программирования. Люди должны начать думать с точки зрения операций и функций вместо инструкций кода. Код - это всего лишь проявление движения мыслей, которое все время играет в нашей голове. – allprog

0

Петля на вашем массиве и сравните i элемент с i+1 элемент. Сделайте счетчик. Пока i меньше i+1 приращивание счетчика, когда i больше i+1 сбросить счетчик.

3

Итерируйте массив и увеличивайте переменную счетчика, если следующий элемент, который вы обрабатываете, больше, чем последний.

Если следующий элемент меньше, или конец массива достигается, сохранить текущее значение счетчика, если его больше, то в настоящее время хранится максимальное значение и сброса переменной счетчика с 0.

2

псевдокод:

Variable X: first item of list 
Variable Y: length of sequence (initial: 1) 
Variable Z: max length occurred (initial: 0) 
Loop over the list starting from 2nd index 
if item is higher than X 
    set X to item 
    add 1 to Y 
else 
    if Y is higher than Z 
    set Z to Y 
    end if 
    set X to item 
    set Y to 1 
end if 
End-Loop 

Этот метод будет перезапускать счетчик каждый раз, когда последовательность «перезагружается», иначе: он больше не сортируется. Пока список сортируется, он просто добавляет 1 для каждого элемента, который находится в отсортированном порядке.

Когда последовательность перестает быть упорядоченной, она проверяет, является ли текущая последовательность длиннее самой длинной длины последовательности. Если это так, у вас есть новая длинная последовательность.

Смежные вопросы