入力配列内で最も長い連続したサブシーケンスを見つけようとしています。私の現在のコードには、入力の各インデックスからシーケンスを開始する外側ループと、開始インデックスに続くすべての要素を反復処理する内側ループがあります。私はこれが単純に開始と終了のインデックスを設定し、配列の範囲をコピーすることで解決できることがわかっていますが、私はこのコードが要素間の減少を認識しない理由を理解できません。プログラムを実行すると、入力配列全体が出力されます。私は、これは全体の問題を解決しません、私はあなたが取得する必要があると思う実現2つのループで連続するサブシーケンスの増加を検出
:
else if(input[j] < currentSubsequence[j-1]){
if(length > longest){
longest =length;
longestSubsequence = currentSubsequence;
}
length = 1; // Add this
}
EDIT:あなたの現在の長さ変数をリセットするのを忘れ
import java.util.Arrays;
public class LongestSubsequence {
public static void longestForward(int[] input) {
int length = 1;
int longest = 1;
int[] currentSubsequence = new int[input.length];
int[] longestSubsequence = new int[input.length];
//Two loops: outer loop iterates through elements of the array
//and makes each one the starting index before executing inner loop
for (int i = 0; i < input.length-1; i++) {
currentSubsequence[i] = input[i];
//next loop iterates through all proceeding elements in the array
//after the starting index
for (int j = i + 1; j < input.length; j++) {
//if the next element is greater than the previous element in the
// subsequence array, it is appended to the array
if(input[j] > currentSubsequence[j-1]) {
currentSubsequence[j] = input[j];
length++;
}
//otherwise the length of the subsequence is compared to the
//longest so far, if it is bigger it sets the longest subsequence
//to the current subsequence
else if(input[j] < currentSubsequence[j-1]) {
if(length > longest) {
longest =length;
longestSubsequence = currentSubsequence;
}
}
}
}
int[] finalArray = Arrays.copyOfRange(longestSubsequence, 0, length);
System.out.println(Arrays.toString(finalArray));
}
public static void main (String[] args) {
int[] x = {1, 2, 3, 2, 6};
longestForward(x);
}
}
コードをインデントしてください。今のところそれに従うのは難しい – litelite