Longest Increasing Subsequence

07/17/2016 Dynamic Programming Binary Search

Question

Given an unsorted array of integers, find the length of longest increasing subsequence.

For example, Given [10, 9, 2, 5, 3, 7, 101, 18], The longest increasing subsequence is [2, 3, 7, 101], therefore the length is 4. Note that there may be more than one LIS combination, it is only necessary for you to return the length.

Your algorithm should run in complexity.

Follow up: Could you improve it to O(n log n) time complexity?


Solution

Result: Accepted Time: 36 ms

Here should be some explanations.

int dp[65535];
int lengthOfLIS(int* nums, int nsz) {
    dp[0] = 1;
    int ret = nsz&1;
    for(int i = 1; i < nsz; i++)
    {
        int value = 0;
        for(int j = 0; j < i; j++)
            if(nums[j] < nums[i] && dp[j] > value)
                value = dp[j];
        dp[i] = value+1;
        if(dp[i] > ret)
            ret = dp[i];
    }
    return ret;
}

Complexity Analytics

  • Time Complexity:
  • Space Complexity: