首页 > 其他 > 详细

刷题300. Longest Increasing Subsequence

时间:2020-04-14 11:06:35      阅读:57      评论:0      收藏:0      [点我收藏+]

一、题目说明

题目300. Longest Increasing Subsequence,给一列无序的整数,找出最大递增序列的长度。难度是Medium!

二、我的解答

这个题目用dp解决,开始想简单了。其中dp[i]表示,前面比nums[i]小的数量且递增的个数。

class Solution{
	public:
		int lengthOfLIS(vector<int>& nums){
			int len = nums.size();
			if(len<1) return 0;
			
			else if(len<2) return 1;
			
			vector<int> dp(len+1,0);
			int num = 1;
			//比当前数字小的个数
			dp[0] = 1;
			bool hasLess = false;
			for(int i=1;i<nums.size();i++){
				if(nums[i]>nums[i-1]){
					dp[i] = dp[i-1]+1;
					for(int j=i-2;j>=0;j--){
						if(nums[i]>nums[j]){
							if(dp[j]+1>dp[i]) dp[i] = dp[j]+1;
						}
					}
				}else{
					hasLess = false;
					for(int j=i-2;j>=0;j--){
						if(nums[i]>nums[j]){
							dp[i] = dp[j]+1;
							hasLess = true;
							break;
						}
					}
					if(! hasLess )dp[i] = 1;
				}
				if(dp[i]>num) num = dp[i];
			}
			
			for(int i=0;i<nums.size();i++){
				cout<<dp[i]<<"->";
			}
			return num;
		}
};

性能如下:

Runtime: 32 ms, faster than 68.27% of C++ online submissions for Longest Increasing Subsequence.
Memory Usage: 8.8 MB, less than 51.56% of C++ online submissions for Longest Increasing Subsequence.

三、优化措施

刷题300. Longest Increasing Subsequence

原文:https://www.cnblogs.com/siweihz/p/12299391.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!