golang刷leetcode技巧之如何实现最长上升子序列
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,小编给大家分享一下golang刷leetcode技巧之如何实现最长上升子序列,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:
千家信息网最后更新 2025年12月04日golang刷leetcode技巧之如何实现最长上升子序列
小编给大家分享一下golang刷leetcode技巧之如何实现最长上升子序列,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
说明:
可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。
你算法的时间复杂度应该为 O(n2) 。
进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?
解题思路:
解法1:动态规划
1,用dp[i]标识,i 位置的最大长度
2,状态转移方程为 dp[i]=max(dp[j]+1) ,j>=0 j
3,取dp最大值
解法2:二分查找
1,用数组记录最长递增序列
2,如果当前元素比最大值大,则插在后面
2,通过二分查找在递增序列里查找位置
3,注意和普通二分查找的区别,如果但强位置比序列位置p的元素大,那么插入位置不是p而是p+1
4,输出p的长度
代码实现
func lengthOfLIS(nums []int) int { if len(nums)<1{ return 0 } dp:=make([]int,len(nums)) for i:=0;imax{ max=dp[i] } } fmt.Println(dp) return max} func lengthOfLIS(nums []int) int { if len(nums)<1{ return 0 } var dp []int dp=append(dp,nums[0]) for i:=1;idp[len(dp)-1]{ dp=append(dp,nums[i]) }else{ l:=0 r:=len(dp)-1 p:=0 for l<=r{ mid:=(l+r)>>1 if nums[i]>dp[mid]{ p=mid+1 l=mid+1 }else{ r=mid-1 } } fmt.Println(dp,l,r,p,i,nums[i]) dp[p]=nums[i] fmt.Println("111",dp,l,r,p,i,nums[i]) } } fmt.Println(dp) return len(dp)} 看完了这篇文章,相信你对"golang刷leetcode技巧之如何实现最长上升子序列"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
序列
最长
升子
位置
长度
最大
输出
技巧
复杂
元素
复杂度
数组
时间
最大值
算法
篇文章
解法
普通
代码
动态
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
mysql 数据库视窗
自定义导入数据库
网络技术中心部门职能说明说
网络安全法规定实施
聊天室系统软件开发
易飞用什么软件开发
梦幻西游黑龙江区所有服务器名称
苹果派香港服务器
怎么开csgo社区服务器
电脑版记账软件开发
知乎计算机四级数据库技术
linux系统搭建服务器
深圳直播软件开发公司哪家好
南通营销软件开发管理
如今中国软件开发企业的社会环境
服务器中病毒
临河app软件开发培训课程
网络安全宣传周活动小组
深信服网络安全认证电话多少
温馨小说软件开发
公司开放网络安全吗
软件开发商标多少类
软件开发 系统可行性分析
江津区工商软件开发流程报价表
linux系统搭建服务器
网络安全和信息安全一样吗
服务器的漏洞需要厂商修复吗
如今中国软件开发企业的社会环境
星拥月互联网科技公司福利待遇
实时历史数据库点位