zoukankan      html  css  js  c++  java
  • [LeetCode] 300. 最长上升子序列

    用一个栈去存储,从头开始遍历,若遇到比自己大的就放到栈中。

    package leetcode;
    
    import java.util.Stack;
    
    /**
     * @author doyinana
     * @create 2020-07-22 9:57
     */
    public class L300 {
        public int lengthOfLIS(int[] nums) {
            Stack<Integer> stack = new Stack<>();
            int maxLen=0;
            for(int i=0;i<nums.length;i++){
                stack.push(nums[i]);
                int n=1;
                for(int j=i;j<nums.length;j++){
                    if(nums[j]>stack.peek()){
                        stack.push(nums[j]);
                        n +=1;
                    }
                }
                maxLen=Math.max(maxLen,n);
            }
            return maxLen;
        }
    }
    View Code

    代码有误。。。。。

    可以用动态规划去做,一开始也有想到用一个dp[]去存储,本来觉得有问题得,但是好像也可以这样做

    package leetcode;
    
    import java.util.Arrays;
    import java.util.Stack;
    
    /**
     * @author doyinana
     * @create 2020-07-22 9:57
     */
    public class L300 {
        public int lengthOfLIS(int[] nums) {
            if(nums.length==0) return 0;
            int[] dp = new int[nums.length];
            int res=0;
            Arrays.fill(dp,1);
            for(int i=0;i<nums.length;i++){
                for(int j=0;j<i;j++){
                    if(nums[j]<nums[i])
                        dp[i]=Math.max(dp[i],dp[j]+1);
                }
                res=Math.max(res,dp[i]);
            }
            return res;
        }
    }

     方法二:

     

     还需要考虑 !!二分法!

  • 相关阅读:
    TCP/IP四层模型
    Java中equals和==的区别
    最全前端资源汇集
    (转)php面向对象学习笔记
    学习内容
    Gulp入门教程
    seajs的CMD模式的优势以及使用
    正则
    Grunt
    Javascript 异步加载详解
  • 原文地址:https://www.cnblogs.com/doyi111/p/13359420.html
Copyright © 2011-2022 走看看