300. Longest Increasing Subsequence

来源:互联网 发布:淘宝拍摄摄影学校 编辑:程序博客网 时间:2024/06/09 17:18

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 O(n2) complexity.

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

题意:求数组的最长递增子序列

思路:dp[i] 记录以nums[i]结尾的递增序列的长度,初始化dp[0] = 1; 则dp[i+1]则是比较nums[i+1] 与之前所有的nums[j]的值,并根据dp[j]更新dp[i+1],没有比nums[i+1]小的则dp[i+1] = 1,所以可以先初始化所有的dp[i]=1。复杂度为O(n^2)。动态规划+binary search可是复杂度降为O(nlogn)。

class Solution {public:int lengthOfLIS(vector<int>& nums) {int m = nums.size();if (m == 0)return 0;vector<int> dp(m, 1);int maxNum = 1;for (int i = 1; i < m; i++){for (int j = i - 1; j >= 0; j--){if (nums[i] > nums[j]){dp[i] = max(dp[i], dp[j]+1);}}if (dp[i] > maxNum)maxNum = dp[i];}return maxNum;}};



0 0
原创粉丝点击