美文网首页
最长上升连续子序列 -dp

最长上升连续子序列 -dp

作者: fdsun | 来源:发表于2020-06-04 10:10 被阅读0次

    给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)

    样例
    样例 1:

    输入:[5, 4, 2, 1, 3]
    输出:4
    解释:
    给定 [5, 4, 2, 1, 3],其最长上升连续子序列(LICS)为 [5, 4, 2, 1],返回 4。
    样例 2:

    输入:[5, 1, 2, 3, 4]
    输出:4
    解释:
    给定 [5, 1, 2, 3, 4],其最长上升连续子序列(LICS)为 [1, 2, 3, 4],返回 4。
    挑战
    使用 O(n) 时间和 O(1) 额外空间来解决

        /**
         * @param A: An array of Integer
         * @return: an integer
         */
        public int longestIncreasingContinuousSubsequence(int[] A) {
            // write your code here
            int n = A.length;
            if (n==0){
                return 0;
            }
    
            int a = LICS(A);
            int i = 0, j = n - 1;
            while (i < j) {
                int temp = A[i];
                A[i] = A[j];
                A[j] = temp;
                i++;
                j--;
            }
            int b = LICS(A);
    
            return Math.max(a, b);
        }
    
        public int LICS(int[] A) {
            int n = A.length;
            int[] f = new int[n];
            int res = Integer.MIN_VALUE;
            for (int i = 0; i < n; i++) {
                f[i] = 1;
    
                if (i > 0 && A[i - 1] < A[i]) {
                    f[i] = Math.max(f[i], f[i - 1] + 1);
                }
    
                res = Math.max(res,f[i]);
            }
            return res;
        }
    
    

    相关文章

      网友评论

          本文标题:最长上升连续子序列 -dp

          本文链接:https://www.haomeiwen.com/subject/wvzwzhtx.html