次のように宣言された 2d ArrayList を使用できます。
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
次に、プロセスの最後に追加される 2 つの ArrayLists を宣言します。
ArrayList<Integer> length = new ArrayList<Integer>();
ArrayList<Integer> value = new ArrayList<Integer>();
それで
1) 要素が前と同じかどうかをチェックするリストを反復処理します。
そうである場合は、最後まで続行するか、異なる要素が検出されるまで続行します。その時点で、以前の等しい要素の数を 'length' と呼ばれる ArrayList に格納し、要素の値を 'value' と呼ばれる要素に格納します。最長の現在のサブシーケンスの長さを含む長さの要素のインデックスを格納する int (index say と呼ばれる) を持ちます (これは、要素の値を含む要素のインデックスと同じになります)。 value に格納されています))。
そうでない場合は、次の要素に移動します。
2) プロセスを繰り返し、必要に応じてインデックスを更新します (つまり、より長いサブシーケンスが発見された場合)。
最後に長さと値を結果に追加するには、次のようにしますresult.add(length);
。result.add(value);
必要なすべての情報を保持する 1 つのオブジェクトを返したい場合は、int 'index' を Integer でラップし、それを 'length' と呼ばれる ArrayList の最後に追加するか、新しい ArrayList に入れてその ArrayList を追加することもできます結果に。
結果に格納された後、最初の ArrayList (この場合は「長さ」と呼ばれるもの) のインデックス i にある要素を取得するには、次のようにする必要があることに注意してください。
result.get(0).get(i);
編集:
したがって、私が念頭に置いていた for ループの部分は次のようになります。
boolean same = false;
int sequenceLength = 0;
Integer sequenceInteger = null;
for (int i = 1; i < numbers.size(); i++)
{
if(numbers.get(i).equals(numbers.get(i-1)))
{
same = true;
sequenceLength++;
}
else(if same == true)
{
sequenceInteger = new Integer(sequenceLength);
//add sequenceInteger to length and numbers.get(i-1) to value
same = false;
sequenceLength = 0;
}
// else do nothing since same is false, which means that the current
// element is different from the previous and the previous is
// different the one before that, so there are no new values to store
}
// end of list reached
(if same == true)
{
sequenceInteger = new Integer(sequenceLength);
//add sequenceInteger to length and numbers.get(i-1) to value
same = false;
}