Ich versuche, die längste zusammenhängende Untersequenz innerhalb eines Eingabearrays zu finden. Mein aktueller Code hat eine äußere Schleife, die eine Sequenz von jedem Index der Eingabe startet, und eine innere Schleife, die alle Elemente durchläuft, die dem Startindex folgen. Ich weiß, dass dies gelöst werden kann, indem man einfach einen Start- und Endindex setzt und einen Bereich des Arrays kopiert, aber ich kann nicht herausfinden, warum dieser Code eine Abnahme von einem Element zu einem anderen nicht erkennt. Wenn ich das Programm ausführe, druckt es immer noch das gesamte Eingabearray.Zunehmende zusammenhängende Untersequenz mit zwei Schleifen finden
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);
}
}
Bitte den Code einrücken. Es ist schwer zu folgen, wie es jetzt ist – litelite