2013-09-25 26 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つの要素を考える。

+1

これはちょっとあまりにも謎かもしれない:)プログラミングのコンストラクトではなくアルゴリズムの観点から説明する。コード命令ではなく、操作や関数の観点から考え始めるべきです。コードは、常に私たちの頭の中で遊んでいる思考の列の現れです。 – allprog

0

配列をループし、i要素をi+1要素と比較してください。カウンターを作る。 ii+1より小さい間に、ii+1より大きい場合、カウンターをリセットします。

3

配列を反復し、処理する次の要素が最後のものより大きい場合は、カウンタ変数をインクリメントします。

次の要素が小さくなる、または配列の末端に達した場合、その現在格納されている最大値より大きなおよび0.1

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が追加されます。

シーケンスが順序付けされなくなると、現在のシーケンスがこれまでの最長のシーケンス長よりも長いかどうかがチェックされます。そうであれば、新しい最長のシーケンスがあります。

関連する問題