繁体   English   中英

找到最长的递增连续子序列

[英]Finding the longest increasing contiguous subsequence

我正在尝试编写一个将序列作为数组的程序,然后打印最长的连续子序列及其长度。 在到目前为止(下面)编写的代码中,我设法通过longestForward方法实现了这一点。 但是,在分配规范中,我还被要求编写另一种方法longestBackwards,该方法可以完成完全相同的任务,即。 将打印完全相同的内容,但是它必须向后搜索原始数组。 这就是我遇到的困难。

我设法编写了一种方法,该方法仅打印最长连续子序列的最后两个成员,并且以相反的顺序打印(例如,对于数组4,5,6,它打印6、5)。 但是,它可以正确打印长度。

如果有人可以帮我弄清楚我做错了什么,将不胜感激。

import java.util.Scanner;
public class LongestSubsequence {
public static void main(String[] args) {

    // Test array
    int[] arr = {4, 5, 6};


    longestForward(arr);
    longestBackward(arr);

  }

public static void longestForward(int[] arr)
{
    int subSeqLength = 1;
    int longest = 1;
    int indexStart = 0;
    int indexEnd = 0;

    for (int i = 0; i < arr.length - 1; i++)
    {
        if (arr[i] < arr[i + 1] )//We need to check if the current is equal to the next
        {
            subSeqLength++;//if it is we increment
            if (subSeqLength > longest)//we assign the longest and new bounds
            {
                longest = subSeqLength;
                indexStart = i + 2 - subSeqLength;
                indexEnd = i + 2;
            }

        } 
        else
            subSeqLength = 1;//else re-initiate the straight length
    }

System.out.println(longest);
    for (int i = indexStart; i < indexEnd; i++)//print the sequence

      System.out.print(arr[i] + ", ");  
}
public static void longestBackward(int[] arr) {

    int subSeqLength = 1;
    int longest = 1;
    int indexStart = 0;
    int indexEnd = 0;
    for (int i = arr.length - 1; i > 0; i--) {
        if (arr[i] > arr[i - 1]) { 
            subSeqLength++;
            if (subSeqLength > longest) {
                longest = subSeqLength;
                indexStart = i + (subSeqLength - 1); 
                indexEnd = i - 1;
            }
        } // Else re-initiate the length
        else {
            subSeqLength = 1;
        }
    }
System.out.println("");
    // Print the sequence
System.out.println(longest);
    for (int i = indexStart-1; i > indexEnd; i--) {
        System.out.print(arr[i] + ", ");
    }
}
}
for (int i = arr.length - 1; i > 0; i--) {
    if (arr[i] > arr[i - 1]) { 
        subSeqLength++;
        if (subSeqLength > longest) {
            longest = subSeqLength;
            indexStart = i + (subSeqLength - 1); 
            indexEnd = i - 1;
        }
    } // Else re-initiate the length

for循环不应该看起来像这样:

for (int i = arr.length - 1; i >= 0; i--) {

您没有收到arr [0],因为您要在arr [1]之后停止。

只是为了澄清..为什么您不能花最长的时间来扭转它呢? 最长的前进会不会是最长的后退的逆转?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM