首页 > 其他分享 >LeetCode 300.最长递增子序列

LeetCode 300.最长递增子序列

时间:2023-08-16 18:31:52浏览次数:36  
标签:nums 300 max 递增 int 序列 LeetCode dp

1.题目:

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

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


示例 1:

输入:nums = [10,9,2,5,3,7,101,18]
输出:4
解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。

示例 2:

输入:nums = [0,1,0,3,2,3]
输出:4

示例 3:

输入:nums = [7,7,7,7,7,7,7]
输出:1



2.代码:

class Solution {
    public int lengthOfLIS(int[] nums) {
       int[] dp = new int[nums.length];//dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度
       Arrays.fill(dp, 1);//全部都初始化为1,因为不管以哪一个为尾,长度至少都是1
       for(int i=0;i<nums.length;i++){//遍历数组
           for(int j=0;j<i;j++){//注意限制条件是小于i
               if(nums[i]>nums[j]){//注意限制条件,这样才可以是一个递增子序列
                   dp[i]=Math.max(dp[j]+1,dp[i]);//递推公式,d[i]表示之前的递增子序列的长度
               }
           }
       }
       int max=0;//最后还是要遍历整个dp数组,才能找到最长的递增子序列
       for(int i=0;i<dp.length;i++){
           if(dp[i]>max) max=dp[i];
           System.out.println(dp[i]);
       }
       return max;
    }
}

































标签:nums,300,max,递增,int,序列,LeetCode,dp
From: https://blog.51cto.com/u_15806469/7112285

相关文章

  • LeetCode 714.买卖股票的最佳时机含手续费
    1.题目:给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易......
  • 第 358 场周赛 - 力扣(LeetCode)
    第358场周赛-力扣(LeetCode)2815.数组中的最大数对和-力扣(LeetCode)双for遍历即可classSolution{public:intmaxSum(vector<int>&nums){autore=[](intx){intma=0;while(x){if(x%10>ma)......
  • 【leetcode】404 左叶子之和
    https://leetcode.cn/problems/sum-of-left-leaves/description/【分析】该题要求左叶子之和。如果我们对当前节点进行叶子节点的判断,那么我们是不知道当前节点是左叶子还是右叶子的。所以我们应该在叶子结点的上层(父节点)进行判断。【代码】classSolution:defsumOfL......
  • LeetCode -- 19. 删除链表的倒数第 N 个结点
     一般的删除问题,可以直接删除(找符合条件的,找到了直接删掉),延迟删除(打标记,找完了再删除),栈,双指针 在链表中删除一个节点,要找到其前面一个节点cur,然后cur->next=cur->next->next即可 方法一:直接删除我们先算出链表长度len,要删除倒第n个节点就是删除第len-n......
  • LeetCode 121.买卖股票的最佳时机
    1.题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获......
  • 【LeetCode 571. 给定数字的频率查询中位数】WITH RECURSIVE实现Tally的逆操作
    目录题目地址代码题目地址https://leetcode.cn/problems/find-median-given-frequency-of-numbers/description/代码WITHRECURSIVERecCTEAS(SELECTnum,frequency-1asremaining_frequencyFROMNumbersWHEREfrequency>0UNIONALLSELECTn......
  • Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
    场景Mysql插入数据从指定选项中随机选择、插入时间从指定范围随机生成、Navicat使用存储过程模拟插入测试数据:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/129179745在上面的基础上,如何使用存储过程构造坐标数据规律递增以及时间递增的模拟数据。表结构如下......
  • Leetcode 206. 反转链表(Reverse linked list)
    题目链接给你单链表的头节点head,请你反转链表,并返回反转后的链表。示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]提示:链表中节点的数目范围是[0,5000]-5000<=Node.val<=5000思路迭代法:创建两个指针,分别指向当前节......
  • LeetCode 198.打家劫舍
    1.题目:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜......
  • LeetCode 213.打家劫舍II
    1.题目:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存......