LeetCode 解题思路 44(Hot 100)

在这里插入图片描述

解题思路:

  1. dp 数组的含义: 以 nums[i] 为结尾的最长递增子序列的长度。
  2. 递推公式: dp[i] = Math.max(dp[i], dp[j] + 1)。
  3. dp 数组初始化: dp[i] = 1。
  4. 遍历顺序: 从小到大去遍历,从 i = 1 开始,直到 i = nums.length - 1。
  5. 打印 dp 数组

Java代码:

class Solution {public int lengthOfLIS(int[] nums) {int[] dp = new int[nums.length];Arrays.fill(dp, 1);int result = 0;for (int i = 0; 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);}}result = Math.max(result, dp[i]);}return result;}
}

复杂度分析:

  • 时间复杂度: O( n 2 n^2 n2)。
  • 空间复杂度: O(1)。
    在这里插入图片描述

解题思路:

  1. 初始化变量​​:
  • maxProduct:记录全局的最大乘积,初始值为数组的第一个元素。
  • minProduct:记录当前的最小乘积,初始值为数组的第一个元素。
  • result:记录最终的结果,初始值为数组的第一个元素。
  1. 遍历数组​​: 对于每个元素 nums[i],我们需要考虑两种情况:
  • 如果 nums[i] 是正数,那么当前的最大乘积可能是 maxProduct ∗ * nums[i] 或 nums[i] 本身,而最小乘积可能是 minProduct ∗ * nums[i] 或 nums[i] 本身。
  • 如果 nums[i] 是负数,那么当前的最大乘积可能是 minProduct ∗ * nums[i] 或 nums[i] 本身,而最小乘积可能是 maxProduct ∗ * nums[i] 或 nums[i] 本身。
  • 为了统一处理这两种情况,我们可以先计算 nums[i]、maxProduct ∗ * nums[i] 和 minProduct ∗ * nums[i] 的值,然后取其中的最大值和最小值分别作为新的 maxProduct 和 minProduct。
  1. 更新结果​​: 在每次迭代中,更新 result 为 maxProduct 和 result 中的较大值。

  2. 返回结果​​: 遍历结束后,返回 result。

Java代码:

public class Solution {public int maxProduct(int[] nums) {int maxProduct = nums[0];int minProduct = nums[0];int result = nums[0];for (int i = 1; i < nums.length; i++) {int tempMax = Math.max(nums[i], Math.max(maxProduct * nums[i], minProduct * nums[i]));minProduct = Math.min(nums[i], Math.min(maxProduct * nums[i], minProduct * nums[i]));maxProduct = tempMax;result = Math.max(result, maxProduct);}return result;}
}

复杂度分析:

  • 时间复杂度: O(n)。
  • 空间复杂度: O(1)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精益数据分析(22/126):解锁创业增长密码与长漏斗分析

精益数据分析&#xff08;22/126&#xff09;&#xff1a;解锁创业增长密码与长漏斗分析 在创业与数据分析的探索旅程中&#xff0c;我们都在不断寻求新的知识和方法&#xff0c;以提升创业的成功率。我一直期望能和大家共同学习、共同进步&#xff0c;今天就让我们继续深入研…

大模型应用开发之LLM入门

一、大模型概述 1、大模型概念 LLM是指用有大量参数的大型预训练语言模型&#xff0c;在解决各种自然语言处理任务方面表现出强大的能力&#xff0c;甚至可以展现出一些小规模语言模型所不具备的特殊能力 2、语言模型language model 语言建模旨在对词序列的生成概率进行建模…

Vue 计算属性 VS 侦听器:从原理到性能的深度对比

在 Vue 开发中&#xff0c;computed&#xff08;计算属性&#xff09;和watch&#xff08;侦听器&#xff09;是响应式系统的两大核心工具。 它们看似都能处理数据变化&#xff0c;实则设计理念和应用场景大相径庭。 一、核心区别&#xff1a;数据驱动的两种范式 1. 触发机制…

特斯拉宣布启动自动驾驶网约车测试,无人出租车服务进入最后准备阶段

特斯拉公司于4月24日正式宣布&#xff0c;已在美国得克萨斯州奥斯汀和加利福尼亚州旧金山湾区启动自动驾驶网约车服务的员工内部测试。这项测试将为今年夏季计划推出的完全无人驾驶出租车服务进行最后的验证和准备。 此次测试使用约200辆经过特殊改装的Model 3车型&#xff0c;…

基于springboot的在线教育系统

一、系统架构 前端&#xff1a;vue | element-ui | html | jquery | css | ajax 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | nodejs | idea 二、代码及数据 三、功能介绍 01. web端-首页1 02. web端-首页2 03. w…

文档编辑:reStructuredText全面使用指南 — 第四部分 高级主题

文档编辑&#xff1a;reStructuredText全面使用指南 — 第四部分 高级主题 reStructuredText&#xff08;简称RST或ReST&#xff09;是一种轻量级的标记语言&#xff0c;用于编写结构化的文档。它由Python社区开发&#xff0c;并广泛应用于技术文档、书籍、博客文章等。reStruc…

git Http改用户下载

用原先别人账号,无权下更新 http方式设置自己账号 例如 git fetch --all 提示没有权限从 http://192.168.1.2/gitlab/项目路径.git下载 git remote set-url origin http://your-username192.168.1.2/gitlab/项目路径.git your-username修改成自己的git账号 需要输入一个Tok…

Cancer Cell|scRNA-seq + scTCR + 空间多组学整合分析,揭示CD8⁺ T细胞在免疫治疗中的“双路径” | 临床问题的组学解答

Cancer Cell&#xff5c;scRNA-seq scTCR 空间多组学整合分析&#xff0c;揭示CD8⁺ T细胞在免疫治疗中的“双路径” &#x1f44b; 欢迎关注我的生信学习专栏~ 如果觉得文章有帮助&#xff0c;别忘了点赞、关注、评论&#xff0c;一起学习 近日&#xff0c;《Cancer Cell》…

Python编程的真谛:超越语法,理解编程本质

你是否也曾陷入这样的误区&#xff1a;学了无数的 Python 语法、刷了几十套题&#xff0c;写起代码却仍然卡顿、举步维艰&#xff1f;这时候你才发现&#xff0c;真正阻碍进步的&#xff0c;从不是语法&#xff0c;而是你对“编程本质”的理解。 如果你只是死记硬背Python的语…

Go协程的调用与原理

Goroutine Go不需要像C或者Java那样手动管理线程&#xff0c;Go语言的goroutine机制自动帮你管理线程。 使用goroutine、 Go语言中使用goroutine非常简单&#xff0c;只需要在调用函数的时候在前面加上go关键字&#xff0c;就可以为一个函数创建一个goroutine。 一个gorout…

自然语言处理(9)—— 共现词矩阵及Python实现

共现词矩阵 1. 概述2. 构建步骤3. 代码实现&#xff08;Python&#xff09;结语 共现词矩阵&#xff08;Co-occurrence Matrix&#xff09;是自然语言处理&#xff08;NLP&#xff09;中用于捕捉词语间语义关系的重要工具。共现矩阵通过统计词语在特定上下文窗口内的共现频率&a…

Spark SQL核心解析:大数据时代的结构化处理利器

在大数据处理领域&#xff0c;Spark以其强大的分布式计算能力脱颖而出&#xff0c;而Spark SQL作为Spark生态系统的重要组成部分&#xff0c;为结构化和半结构化数据处理提供了高效便捷的解决方案。它不仅整合了传统SQL的强大查询功能&#xff0c;还深度集成到Spark的计算框架中…

多态以及多态底层的实现原理

本章目标 1.多态的概念 2.多态的定义实现 3.虚函数 4.多态的原理 1.多态的概念 多态作为面对三大特性之一,它所指代的和它的名字一样,多种形态.但是这个多种形态更多的指代是函数的多种形态. 多态分为静态多态和动态多态. 静态多态在前面已经学习过了,就是函数重载以及模板,…

linux下开发NFC读写器

linux下使用NFC读卡器&#xff0c;基于QT5开发 创建工程&#xff0c;引入lib开始编写代码 创建工程&#xff0c;引入lib 创建一个QT工程&#xff0c;如果是控制台程序&#xff0c;则去掉gui QT - gui引入lib库 LIBS -L$$PWD/lib -lyw60x这里需要将libyw60x.so库文件放在工程…

Linux基础使用-笔记

1. 文件和目录操作 查看当前目录&#xff1a;pwd 命令用于显示当前工作目录的完整路径。 pwd切换目录&#xff1a;cd 命令用于切换工作目录。 # 切换到指定目录 cd /home/user/Documents # 切换到上一级目录 cd .. # 切换到用户主目录 cd ~列出目录内容&#xff1a;ls 命令用…

DAG(有向无环图)计算模型面试内容整理-拓扑排序(Topological Sort)和节点依赖与并行度

拓扑排序(Topological Sort) 拓扑排序(Topological Sort): 拓扑排序是针对有向无环图(DAG)的一种线性排序方法。这种排序方法的特点是,对于DAG中的每一条有向边 (A → B),在拓扑排序中节点A总是排在节点B之前。

23种设计模式-结构型模式之享元模式(Java版本)

Java 享元模式&#xff08;Flyweight Pattern&#xff09;详解 &#x1f98b; 什么是享元模式&#xff1f; 享元模式是一种结构型模式&#xff0c;它通过共享相同的对象来减少内存消耗&#xff0c;适用于大量细粒度对象的场景。关键思想是缓存重复出现的对象&#xff0c;避免…

浏览器访问背后的秘密:从加载到关闭,数据是否会丢失?

⏩ 一次浏览器访问 www.xxx.com 背后发生了什么&#xff1f; —— 以及“我点了 &#xff0c;数据会不会丢&#xff1f;”的深度剖析 适读人群&#xff1a;Web 开发者、运维工程师、性能调优/安全从业者 1️⃣ 打开浏览器敲下网址&#xff1a;链路是如何启动的&#xff1f; 阶…

【HDFS入门】深入解析DistCp:Hadoop分布式拷贝工具的原理与实践

目录 1 DistCp概述与应用场景 2 DistCp架构设计解析 2.1 系统架构图 2.2 执行流程图 3 DistCp核心技术原理 3.1 并行拷贝机制 3.2 断点续传实现原理 4 DistCp实战指南 4.1 常用命令示例 4.2 性能优化策略 5 异常处理与监控 5.1 常见错误处理流程 5.2 监控指标建议…

hbuilderx云打包生成的ipa文件如何上架

使用hbuilderx打包&#xff0c;会遇到一个问题。开发的ios应用&#xff0c;需要上架到app store&#xff0c;因此&#xff0c;就需要APP store的签名证书&#xff0c;并且还需要一个像xcode那样的工具来上架app store。 我们这篇文章说明下&#xff0c;如何在windows电脑&…