2013-09-25 51 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循環,如果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

當序列停止排序時,它會檢查當前序列是否比迄今爲止最長的序列長度長。如果是,你有你的新的最長序列。