最长上升子序列 leetcode 300
dp解法
int lengthOfLIS(vector<int>& nums) { //dp解法O(n^2) int len=nums.size(); if(len==0) return 0; vector<int> dp(len,1); int maxlen=1; for(int i=1;i<len;i++) { for(int j=0;j<i;j++) { if(nums[i]>nums[j]) { dp[i]=max(dp[i],dp[j]+1); } } if(dp[i]>maxlen) maxlen=dp[i]; } return maxlen; }
贪心加二分解法
class Solution { public: int lengthOfLIS(vector<int>& nums) { int s=nums.size(); if(s==0) return 0; int *sta=new int[s]; int cnt=1; sta[0]=nums[0]; for(int i=1;i<s;i++) { if(nums[i]>sta[cnt-1]) { sta[cnt]=nums[i]; cnt++; } else { int pos=lower_bound(sta,sta+cnt,nums[i])-sta; sta[pos]=nums[i]; } } return cnt; } };
posted on 2020-03-09 18:37 QingFengDaHui 阅读(227) 评论(0) 编辑 收藏 举报