300.Longest Increasing Subsequence解题记录


approach 1:动态规划

O(n2)时间复杂度

int lengthOfLIS(int* nums, int numsSize) {
    int i,j;
    int *dp=malloc(sizeof(int)*numsSize);
    int res=0;
    for(i=0;i<numsSize;i++){
        dp[i]=1;
    }
    for(i=0;i<numsSize;i++){
        for(j=0;j<i;j++){
            if(nums[i]>nums[j]&&dp[j]+1>dp[i])
                dp[i]=dp[j]+1;
        }
        if(dp[i]>res)
            res=dp[i];
    }
    return res;
}

approach 2:结合二分查找的动态规划

O(n logn)复杂度解法