配列リストと同じ番号の最長の部分列を見つける[closed]
-
23-12-2019 - |
質問
私はこれを実装するための最良の方法は何だろうと思っていました。
どのような情報を保存する必要があるかを保存する良い方法を考えることはできません インデックスと値の数、そして最後に繰り返される実際の数
public class testing
{
public static void main(String[] args)
{
ArrayList<Integer> numbers = new ArrayList<Integer>();
Scanner in = new Scanner(System.in);
Integer a =0;
Integer value = 0;
Integer num = 0;
boolean loop = true;
//getting the string information
while(loop)
{
System.out.println("Enter a series of numbers, 0 to stop");
Integer n = in.nextInt();
if(n.equals(0))
{
break;
}
else
{
numbers.add(n);
}
}
for (int i = 1; i < numbers.size(); i++)
{
}
}
}
解決
次のように宣言された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と呼ばれる)を持っています(これは、それが構成されてい
そうでない場合は、次の要素に移動します。
2)このプロセスを繰り返し、必要に応じてインデックスを更新します(つまりより長い部分列が発見された場合)。
最後に結果に長さと値を追加するには、次のようにします result.add(length);
と result.add(value);
必要なすべての情報を保持する1つのオブジェクトを返す場合は、int'index'を整数でラップし、'length'というArrayListの最後に追加するか、新しいArrayListに入れてarraylistを
Resultに格納された後、最初のArrayList(この場合は'length'と呼ばれるもの)のインデックス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;
}
所属していません StackOverflow