zoukankan      html  css  js  c++  java
  • 算法:动态规划填表,最大子数组问题

    题目:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

    子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

    输入:nums = [10,9,2,5,3,7,101,18]

    输出:4

    解释:最长递增子序列是 [2,3,7,101],因此长度为 4

    此问题为动态规划问题

    class Solution {
        public int lengthOfLIS(int[] nums) {
        int len=nums.length;
           int[] dp=new int[len];
         // 1 初始化为1
    
            for(int i=0;i<len;i++){
    
                dp[i]=1;
       }
    
            // 2 填表
    
            for(int i=0;i<len;i++){
                for(int j=0;j<i;j++){
                   if(nums[i]>nums[j]){
                 dp[i]=Math.max(dp[j]+1,dp[i]);
    
                    }
                }
    
            }
    
            // 3 遍历dp表,找到最大值
           //因为dp[i]的含义是以第i个元素结尾的最大的递增子序列,所以dp[len-1]不一定最大!
    
            int max=0;
    
            for(int i=0;i<len;i++){
             max=Math.max(max,dp[i]);
    
            }
    
            return max;
    
        }
    
    }

     主要思想路为用bp[i]去记录所遍历子数组最大值

    时间复杂度为O(n^2)

    其为解法的一种,还可以用O(nlog(n)来解,下次填坑。

  • 相关阅读:
    python函数名和左括号之间不能有空格
    linux版本选择
    filter_map
    awk统计总结
    Spring Boot + Redis 实现各种操作
    手机号正则校验
    判断windows系统
    Redis分布式锁
    shell 脚本快速部署 SpringBoot 项目
    Java主流的Http请求--原生的HttpURLConnection
  • 原文地址:https://www.cnblogs.com/orange0/p/15314608.html
Copyright © 2011-2022 走看看