leetcode 300:最长上升子序列

leetcode 300:最长上升子序列


题目描述:给定一个无序的整数数组,找到其中最长上升子序列的长度。最长上升子序列不要求是连续的。
输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。

解题步骤
1、 状态定义:采用一维数组dp[i]来表示代表 nums 前i个数字的最长子序列长度,其中nums[i]表示上升过程中的最大值
2、 状态转移方程
如果nums[j] < nums[i],就dp[i]=max(dp[i],dp[j]+1)
3、 初始化:初始dp[i]全部为1
4、 输出:输出dp数组中的最大值
代码

    public int lengthOfLIS(int[] nums) {
    	if(nums.length==0)
    		return 0;
    	int[] dp = new int[nums.length];
    	Arrays.fill(dp, 1);
    	int ret = 1;
    	for (int i = 1; i < dp.length; i++) {
    		for (int j = 0; j < i; j++) {
    			if(nums[i] > nums[j]) {
    				dp[i] = Math.max(dp[i], dp[j]+1);
    			}
    		}
    		ret = Math.max(ret, dp[i]);
		}
    	System.out.println(Arrays.toString(dp));
    	return ret;
    }
发布了28 篇原创文章 · 获赞 0 · 访问量 250

猜你喜欢

转载自blog.csdn.net/zy450271923/article/details/105301405