6

私は誰かにこれを解決するように頼んでいるわけではありません。私はこれをどこから始めるべきかについて地上の考えがないので、少しプッシュする必要があります. 私が知っているのは、これにコレクションを実装してソートする必要があるということだけです。

整数のリスト内でソートされた最長のシーケンスの長さを返すメソッド longestSortedSequence を記述します。たとえば、list という変数に次の値のシーケンスが格納されているとします。

[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
}
4

4 に答える 4

3

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

次の要素が小さい場合、または配列の最後に到達した場合、現在格納されている最大値よりも大きい場合は現在のカウンター値を格納し、カウンター変数を 0 でリセットします。

于 2013-09-25T21:32:05.703 に答える
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ソートされた順序で各要素を追加するだけです。

シーケンスの順序付けが停​​止すると、現在のシーケンスがこれまでの最長のシーケンス長よりも長いかどうかがチェックされます。もしそうなら、あなたはあなたの新しい最長のシーケンスを持っています.

于 2013-09-25T21:32:16.423 に答える
0

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

于 2013-09-25T21:31:51.420 に答える