leecode题解Golang版本-300-最长递增子序列

news2025/1/21 10:13:06

前言

开设专栏主要是为了能够记录自己刷题过程中的所思所想,以便能够在未来开发工作中能够快速温习并应用。如果文章能够带给大家一些启发,那便是意外之喜了。

题目描述

leecode-300 最长递增子串
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

题解

func lengthOfLIS(nums []int) int {
	m := make([]int, len(nums))
	res := 0
	for i := 0; i < len(nums); i++ {
		counter := 1
		for j := 0; j < i; j++ {
			if nums[j] < nums[i] {
				counter = Max(counter, m[j]+1)
			}
		}
		m[i] = counter
		res = Max(res, counter)
	}
	return res

}
func Max(a, b int) int {
	if a > b {
		return a
	} else {
		return b
	}
}

核心:动态规划

首先,我们应该思考的是,对于序列中的某一个元素i而言,它的存在会对我们求解的结果有影响吗?以序列0316227为例,我们来分析解题思路:
在这里插入图片描述
如上图所示,以0为末尾的最长严格递增子序列是0,以3为末尾的最长子序列是03.我们来分析第三个元素1。当这个元素作为序列末尾的时候,他的最长递增子序列的长度我们该怎么计算。显而易见的是,0<1,3>1,我们是不是可以得出这样的结论,第三个元素1可以添加到第一个元素为末端的子序列的后边,这时的子序列为01,同样符合严格递增子序列的定义。我们可以叠加以第一个元素为末端的严格递增子序列的长度+1,就是以第三个元素为末端的递增子序列的长度。

在这里插入图片描述
我们将目光转移到第四个元素,6>1,6>3,6>0,那么以6可以添加到以0/3/1为末端的最长递增子序列的末端,以6为末端的最长递增子序列就是上面以0/3/1为末端的最长递增子序列中的最大值。依次类推,我们可以得出以下的求解过程:

在这里插入图片描述

上图的DP[i]指的是:以第i个元素为序列末端时的最长严格递增子序列长度。上图展示了该值的推导过程。当我们遍历得出DP[i]的值的时候,我们就可以推导该题的全部可能场景。原体中提及的一个整数数组 nums ,找到其中最长严格递增子序列的长度的题解,一定符合上文推导中提及的假设:即这个题解一定是以第i个元素为序列末端时的最长严格递增子序列长度,那么我求出DP[i]的最大值,就是我们最终的题解。

后记

算法学习,前路慢慢,与君共勉

无他,唯手熟尔

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

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

相关文章

C++11并发与多线程

C11并发与多线程 1. 线程是进程中的实际运作单位 并发&#xff1a;两个或者更多的任务&#xff08;独立的活动&#xff09;同时发生&#xff08;进行&#xff09;&#xff1a;一个程序同时执行多个独立的任务 进程&#xff1a;一个可执行程序运行起来了&#xff0c;就叫创建了…

RocketMQ系统性学习-RocketMQ高级特性之消息大量堆积处理、部署架构和高可用机制

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 【11来了】文章导读地址&#xff1a;点击查看文章导读&#xff01; &#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f3…

MATLAB遗传算法工具箱的三种使用方法

MATLAB中有三种调用遗传算法的方式&#xff1a; 一、遗传算法的开源文件 下载“gatbx”压缩包文件&#xff0c;解压后&#xff0c;里面有多个.m文件&#xff0c;可以看到这些文件的编辑日期都是1998年&#xff0c;很古老了。 这些文件包含了遗传算法的基础操作&#xff0c;包含…

TrustZone之与非安全虚拟化交互

到目前为止&#xff0c;我们在示例中忽略了非安全状态中可能存在的虚拟化程序。当存在虚拟化程序时&#xff0c;虚拟机与安全状态之间的许多通信将通过虚拟化程序进行。 例如&#xff0c;在虚拟化环境中&#xff0c;SMC用于访问固件功能和可信服务。固件功能包括诸如电源管理之…

C语言数据结构-----常用七种排序介绍、分类、实现及性能比较

前言 ①排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 ②稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#…

Guava的TypeToken在泛型编程中的应用

第1章&#xff1a;引言 在Java世界里&#xff0c;泛型是个相当棒的概念&#xff0c;能让代码更加灵活和类型安全。但是&#xff0c;泛型也带来了一些挑战&#xff0c;特别是当涉及到类型擦除时。这就是TypeToken大显身手的时候&#xff01; 作为Java程序员的咱们&#xff0c;…

前端-如何用echarts绘制含有多个分层的波形图

一、效果图展示 先展示一下实际的效果图 用户选择完需要的波形参数字段之后&#xff0c;页面开始渲染图表&#xff0c;有几个参数就要渲染几个grid&#xff0c;也就是几行波形。 二、绘制逻辑 拿到所选的参数数据之后 1.首先是给横坐标轴的里程-数据注入 2.修改tooltip&am…

鸿蒙开发者工具安装及入门程序

下载工具DevEco Studio IDE 官网下载&#xff1a;HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 开发工具的安装 解压下载好的压缩包&#xff0c;一路无脑安装即可&#xff0c;安装完的使用方法类似于IDEA、WebStorm的使用&#xff0c;快捷键一致&#xff0c;默认黑…

运算符号、算术运算符、赋值运算符、比较(关系)运算符、逻辑运算符、位运算符、条件运算符

运算符是一种特殊的符号&#xff0c;用以表示数据的运算、赋值和比较等。 运算符的分类&#xff1a;按照功能分为&#xff1a;算术运算符、赋值运算符、比较&#xff08;或关系&#xff09;运算符、逻辑运算符、位运算符、条件运算符、Lambda运算符。 按照操作数的个数分为&am…

el-select如何去掉placeholder属性

功能要求是&#xff1a;当el-select的disabled属性为true的时候不展示“请选择”字样 1、要去掉 el-select 元素的 placeholder 属性&#xff0c;可以在代码中将其设置为空字符串。 <el-select placeholder"" ...></el-select> 注意&#xff1a;这种方…

多个bean获取同一个Service,获取的内存地址是同一块;引用bean地址存储在一个map中

public class UserService {public void test() {System.out.println("---test----");} } Testpublic void doesNotContain1(){// 创建Spring容器AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext();// 向容器中注册…

odoo17核心1——概述

odoo17发布了&#xff0c;如果说odoo16是一个承前启后的版本&#xff0c;那么odoo17则完全抛弃了历史包袱&#xff0c;全面简化了前端代码&#xff0c;是一个里程碑式的版本。 在学习odoo的过程中&#xff0c;结合对源码的阅读&#xff0c;对odoo的设计哲学有了一些自己的感悟…

【XR806开发板试用】通过http请求从心知天气网获取天气预报信息

1. 开发环境搭建 本次评测开发环境搭建在windows11的WSL2的Ubuntu20.04中&#xff0c;关于windows安装WSL2可以参考文章: Windows下安装Linux(Ubuntu20.04)子系统&#xff08;WSL&#xff09; (1) 在WSL的Ubuntu20.04下安装必要的工具的. 安装git: sudo apt-get install git …

桶装水送水小程序:提升服务质量的利器

随着移动互联网的发展&#xff0c;越来越多的消费者通过手机在线购物和订购商品。如果你是一名桶装水供应商&#xff0c;想要拓展线上业务&#xff0c;那么开发一个桶装水微信小程序将是一个明智的选择。本文将指导你从零开始开发一个桶装水微信小程序&#xff0c;让你轻松完成…

Google推出Gemini AI开发——10年工作经验的Android开发要被2年工作经验的淘汰了?

应用程序中利用 Gemini 前言&#xff08;可略过&#xff09;、使用 Gemini Pro 开发应用程序正文、Android Studio 中构建Gemini API Starter 应用第 1 步&#xff1a;在 AI 的新项目模板的基础上进行构建第 2 步&#xff1a;生成 API 密钥第 3 步&#xff1a;开始原型设计 正文…

2024年【安全生产监管人员】模拟考试题库及安全生产监管人员理论考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产监管人员模拟考试题库是安全生产模拟考试一点通总题库中生成的一套安全生产监管人员理论考试&#xff0c;安全生产模拟考试一点通上安全生产监管人员作业手机同步练习。2024年【安全生产监管人员】模拟考试题…

【小黑嵌入式系统第十二课】μC/OS-III程序设计基础(二)——系统函数使用场合、时间管理、临界区管理、使用规则、互斥信号量

上一课&#xff1a; 【小黑嵌入式系统第十一课】μC/OS-III程序设计基础&#xff08;一&#xff09;——任务设计、任务管理&#xff08;创建&基本状态&内部任务&#xff09;、任务调度、系统函数 文章目录 一、系统函数使用场合1.1 时间管理1.1.1 控制任务的执行周期1…

数据分析基础之《numpy(5)—合并与分割》

了解即可&#xff0c;用panads 一、作用 实现数据的切分和合并&#xff0c;将数据进行切分合并处理 二、合并 1、numpy.hstack 水平拼接 # hstack 水平拼接 a np.array((1,2,3)) b np.array((2,3,4)) np.hstack((a, b))a np.array([[1], [2], [3]]) b np.array([[2], […

AndroidStudio无法新建Java工程解决办法

我用的 AS 版本是 Android Studio Giraffe | 2022.3.1 Build #AI-223.8836.35.2231.10406996, built on June 29, 2023 以往新建工程都是 New project >> Empty Activity &#xff0c; 有个选择 Java 还是 Kotlin 语言的选项&#xff0c; 之后会默认生成一个 MainActi…

DB207S-ASEMI迷你贴片整流桥DB207S

编辑&#xff1a;ll DB207S-ASEMI迷你贴片整流桥DB207S 型号&#xff1a;DB207S 品牌&#xff1a;ASEMI 封装&#xff1a;DBS-4 最大平均正向电流&#xff1a;2A 最大重复峰值反向电压&#xff1a;1000V 产品引线数量&#xff1a;4 产品内部芯片个数&#xff1a;4 产品…