当前位置: 首页 > news >正文

leetcode hot100【LeetCode 300. 最长递增子序列】java实现

LeetCode 300. 最长递增子序列

题目描述

给定一个未排序的整数数组 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
解释: 最长递增子序列为 [0,1,2,3] 或 [0,1,3] 或 [0,3,2,3],长度均为 4。

示例 3:

输入: nums = [7,7,7,7,7]
输出: 1
解释: 最长递增子序列为 [7],长度为 1。

Java 实现代码

class Solution {public int lengthOfLIS(int[] nums) {if (nums.length == 0)return 0;int[] dp = new int[nums.length];int maxLength = 1;Arrays.fill(dp, 1);for (int i = 1; i < nums.length; i++) {for (int j = 0; j < i; j++) {if (nums[i] > nums[j]) {dp[i] = Math.max(dp[i], dp[j] + 1);}}maxLength = Math.max(maxLength, dp[i]);}return maxLength;}
}

解题思路

  1. 边界条件处理

    • 如果输入数组 nums 为空,直接返回长度为 0。
  2. 初始化

    • 创建一个长度与 nums 相同的数组 dp,用于存储到每个位置为止的最长递增子序列的长度。
    • 使用 Arrays.fill(dp, 1)dp 数组的所有元素初始化为 1,因为每个元素自身可以看作是一个长度为 1 的递增子序列。
  3. 动态规划过程

    • 外层循环遍历数组 nums 的每个元素,从第二个元素开始(索引 1)。
    • 内层循环遍历当前元素之前的所有元素(索引 0 到 i-1)。
    • 如果当前元素 nums[i] 大于之前的某个元素 nums[j],则说明可以通过添加 nums[i] 来扩展以 nums[j] 结尾的递增子序列。
    • 更新 dp[i]dp[j] + 1,表示以 nums[i] 结尾的递增子序列的长度。
    • 同时,更新 maxLengthdp[i] 和当前 maxLength 的最大值,以记录遍历过程中找到的最长递增子序列的长度。
  4. 返回结果

    • 遍历完成后,maxLength 存储的就是整个数组的最长递增子序列的长度。

复杂度分析

  • 时间复杂度:O(n^2),其中 n 是数组 nums 的长度。这是因为有两层循环,外层循环 n 次,内层循环在最坏情况下也是 n 次。
  • 空间复杂度:O(n),需要一个大小为 n 的数组 dp 来存储中间结果。

注:题目来源leetcode网站

http://www.lryc.cn/news/476722.html

相关文章:

  • sql注入——靶场Less1
  • docker file容器化部署Jenkins(一)
  • ArkTS组件继承的高级用法
  • 第十二章 spring Boot+shiro权限管理
  • jmeter基础01-3_环境准备-Linux系统安装jdk
  • 数字证书的简单记录
  • ssm基于SSM的校内信息服务发布系统的设计与实现+vue
  • Java 教程简介
  • 【C/C++】【三种方法】模拟实现strlen
  • 外贸平台开发多语言处理的三种方式
  • 学习GCC
  • B2109 统计数字字符个数
  • springboot Lark扫码登录
  • 中专女生数赛疑云:阿里蒙冤,学校之过,尽显世态炎凉
  • 【neo4j】 图数据库neo4j cypher单一语句 optional 可选操作的技巧
  • ip地址分为几大类-IP和子网掩码对照表
  • 第四篇: 用Python和SQL在BigQuery中进行基础数据查询
  • OpenCV中使用EdgeDrawing模块查找圆
  • C++在游戏领域的主要应用
  • 基于SpringBoot的“CSGO赛事管理系统”的设计与实现(源码+数据库+文档+PPT)
  • Web Broker(Web服务应用程序)入门教程(2)
  • redis:list列表命令和内部编码
  • .Net Core Configuration用法
  • 分享一些企业选择管理顾问公司的成功经验
  • 「Qt Widget中文示例指南」如何实现窗口嵌入?
  • 企业CRM选型必看:2024年最佳CRM系统排行
  • SQL入门的基础知识
  • JS渗透(安全)
  • 淘宝扭蛋机小程序,功能优势分析
  • Redis 数据备份与恢复