• Longest Increasing Continuous Subsequence


    Give an integer array,find the longest increasing continuous subsequence in this array.

    An increasing continuous subsequence:

    • Can be from right to left or from left to right.
    • Indices of the integers in the subsequence should be continuous.
     Notice

    O(n) time and O(1) extra space.

    Example

    For [5, 4, 2, 1, 3], the LICS is [5, 4, 2, 1], return 4.

    For [5, 1, 2, 3, 4], the LICS is [1, 2, 3, 4], return 4.

    Runtime: 29ms

     1 class Solution {
     2 public:
     3     /**
     4      * @param A an array of Integer
     5      * @return  an integer
     6      */
     7     int longestIncreasingContinuousSubsequence(vector<int>& A) {
     8         // Write your code here
     9         
    10         if (A.empty()) return 0;
    11         int result = 1;
    12         int leftMax = 1, rightMax = 1;
    13         for (int i = 1; i < A.size(); i++) {
    14             // from left to right
    15             if (A[i] > A[i - 1]) {
    16                 leftMax++;
    17                 rightMax = 1;
    18                 result = max(result, leftMax);
    19             }
    20             else { // from right to left
    21                 leftMax = 1;
    22                 rightMax++;
    23                 result = max(result, rightMax);
    24             }
    25         }
    26         return result;
    27     }
    28 };

    Runtime: 838ms

     1 class Solution {
     2 public:
     3     /**
     4      * @param A an array of Integer
     5      * @return  an integer
     6      */
     7     int longestIncreasingContinuousSubsequence(vector<int>& A) {
     8         // Write your code here
     9         if (A.empty()) return 0;
    10         
    11         // scan from left to right
    12         int leftMax = 1;
    13         for (int i = 1; i < A.size(); i++) {
    14             int j = i;
    15             while (j < A.size() && A[j] > A[j - 1]) j++;
    16             leftMax = max(leftMax, j - i + 1);
    17         }
    18         
    19         // scan from right to left
    20         int rightMax = 1;
    21         for (int i = A.size() - 2; i >= 0; i--) {
    22             int j = i;
    23             while (j >= 0 && A[j] > A[j + 1]) j--;
    24             rightMax = max(i - j + 1, rightMax);
    25         }
    26         return max(leftMax, rightMax);
    27     }
    28 };
  • 相关阅读:
    Loadrunner初学
    loadrunner安装
    性能测试基础知识
    编程语言的基本套路
    Axure RP初学
    网络分层
    网络软件的组成
    C#MVC的基础知识
    xml的基本认识
    添加ASPCMS模板的步骤
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/5838384.html
Copyright © 2020-2023  润新知