首页 > 其他分享 >代码随想录day43 || 300 最长递增子序列,674 最长连续递增子序列,718 最长重复子数组

代码随想录day43 || 300 最长递增子序列,674 最长连续递增子序列,718 最长重复子数组

时间:2024-08-28 11:38:59浏览次数:12  
标签:return nums int 递增 len 序列 path 最长 dp

300 最长递增子序列

var path []int
var res int
func lengthOfLIS(nums []int) int {
	// 尝试回溯思路
	if len(nums) == 1 {
		return 1
	}

	path = []int{}
	res = 0
	backtracking(nums)
	return res
}

func backtracking(nums []int) {
	if len(nums) == 0 {
		if len(path) > res {
			res = len(path)
		}
		//fmt.Println(path, res )
		return
	}

	for i:=0; i<len(nums); i++ {
		if len(path)==0 || len(path)>0 && nums[i] > path[len(path) - 1]{
			path = append(path, nums[i])
			backtracking(nums[i+1: ])
			path = path[0 : len(path) - 1]
		}else {
			backtracking(nums[i+1: ])
		}
	}

}

func lengthOfLIS(nums []int) int {
	// 动态规划
	// dp[i] 表示以nums[i] 为结尾的最长递增子序列的长度
	// 递推 dp[i] = max(dp[j] + 1, dp[i]) j: 0-> i-1; if nums[i] > nums[j]
	// dp[0] = 0, dp[1] = 1
	// 遍历数组
	// print

	if len(nums) == 1{
		return 1
	}

	var dp = make([]int, len(nums))
	for idx, _ := range dp{
		dp[idx] = 1
	}
	for i:=1; i<len(nums); i++ {
		for j:=0; j<i; j++{
			if nums[i] > nums[j] {
				dp[i] = max(dp[i], dp[j] + 1)
			}
		}
	}
	//fmt.Println(dp)
	return maxslice(dp)
}

func maxslice (dp []int) int {
	var m int
	for _, v := range dp{
		if v > m {
			m = v
		}
	}
	return m
}

674 最长递增子序列

func findLengthOfLCIS(nums []int) int {
	// 相比300 最长递增子序列条件多了一个连续,所以,递推公式也要判断连续情况
	// dp[i] 表示以nums[i] 结尾的最长连续子序列长度
	// if nums[i] > nums[i-1] {dp[i] = dp[i-1]+1}
	// dp数组初始化为1
	// print

	if len(nums) == 1{
		return 1
	}
	var dp = make([]int, len(nums))
	for idx, _ := range dp {
		dp[idx] = 1
	}

	for i:=1; i<len(nums); i++ {
		if nums[i]> nums[i-1]{
			dp[i] = dp[i-1]+1
		}
	}
	//fmt.Println(dp)
	return maxslice(dp)
}

718 最长重复子数组

func findLength(nums1 []int, nums2 []int) int {
	// 本题考虑二维数组
	// dp[i][j] 表示对应nums1[i], nums2[j] 的最长公共子数组长度
	// dp[i][j] = dp[i-1][j-1] + 1 (if nums[i] == nums[j]) else { dp[i][j] = dp[i-1][j-1] }
	// 初始化为0
	// 两个数组遍历顺序无所谓
	// 打印
	var dp = make([][]int, len(nums1) + 1)
	for idx, _ := range dp {
		dp[idx] = make([]int, len(nums2) + 1)
	}
	var max int = 0
	for i:=0; i<len(nums1); i++{
		for j:=0; j<len(nums2); j++{
			if nums1[i] == nums2[j] {
				dp[i+1][j+1] = dp[i][j] + 1
			}

			if dp[i+1][j+1] > max{
				max = dp[i+1][j+1]
			}
		}
	}

	//fmt.Println(dp)
	return max
}

// 一个坑点在于需要连续但是题目没有明确说明
[0,1,1,1,1] [1,0,1,0,1]  正确答案是【0,1】= 3  而不是【1,1,1】= 3

标签:return,nums,int,递增,len,序列,path,最长,dp
From: https://www.cnblogs.com/zhougongjin55/p/18384319

相关文章

  • 南沙C++陈老师讲题:1078:求分数序列和
    ​【题目描述】【输入】输入有一行,包含一个正整数n(n≤30)n(n≤30)。【输出】输出有一行,包含一个浮点数,表示分数序列前nn项的和,精确到小数点后44位。【输入样例】2【输出样例】3.5000#include<iostream>#include<stdio.h>usingnamespacestd;intmain()......
  • NLP从零开始------14.文本中阶序列处理之语言模型(2)
    3.2长短期记忆        梯度消失问题的一个解决方案是使用循环神经网络的变体——长短期记忆( long short- term memory, LSTM)。        长短期记忆的原理是, 在每一步t, 都保存一个隐状态和一个单元状态( cell state) , 通过单元状态来存储长距离......
  • 13.3 Java对象序列化梳理
    目录13.3Java对象序列化13.3.1 引入13.3.1 对象序列化与对象流1.Serializable接口2.ObjectInputStream类和ObjectOutputStream类13.3.2向ObjectOutputStream中写入对象13.3Java对象序列化13.3.1 引入应用场景:对象的寿命通常随着创建该对象程序的终止而终......
  • 用Python实现时间序列模型实战——Day1:时间序列的基本概念
    一、学习内容1.时间序列数据的定义与特点定义:时间序列数据是一组按时间顺序排列的观测值。时间序列的每个观测值都与特定时间点相关联。例如,气温每天的记录、股票每日的收盘价等。特点:时间依赖性:时间序列数据的一个基本特点是当前数据点可能依赖于之前的一个或多个数据点......
  • Java中的序列化与反序列化深度剖析
    序列化与反序列化在Java开发中扮演了重要角色,特别是在数据持久化、RPC(远程过程调用)以及分布式系统中。本篇博客将详细解析Java中的序列化机制,讨论常见的序列化框架,并提供实际代码示例帮助理解。什么是序列化与反序列化?序列化(Serialization):将Java对象转换为字节流的过程,以便将......
  • java反序列化——CC1链
    参考【【Java反序列化链】CommonsCollections1深入浅出,详细分析(cc1链)】【Java反序列化链】CommonsCollections1深入浅出,详细分析(cc1链)_哔哩哔哩_bilibilijava反序列化是java安全中非常重要的一点,也是最难的一点,我只能勉强跟着链子走一遍附上一些浅显的理解。 CC1链也......
  • 02 使用 LSTM 进行时间序列预测
    深度学习入门:使用LSTM进行时间序列预测引言深度学习在时间序列预测中展现出了强大的能力,尤其是长短期记忆(LSTM)网络。本文将为深度学习初学者介绍如何使用LSTM网络进行时间序列预测。我们将从基础知识讲起,提供代码示例,并解释每一步的技术细节。希望通过本文,大家能对LS......
  • 【python】时间序列模型(ARIMA)
    文章目录前言一、示例二、代码实现----python全部数据的平稳性检验划分训练集平稳性检验确定p,q结果分析和模型检验模型预测前言接上一篇博客,用python完成代码编写。一、示例已知一个上市公司一段时期的开盘价,最高价,最低价,收盘价等信息,要求建立模型,预测股价。这......
  • 4:python之序列 (列表篇)
    序列        列表简介                1:列表:用于存储任意数目、任意类型的数据集合。        2:列表是内置可变序列,是包含多个元素的有序连续的内存空间列表的标准语法格式:a=[1,2,3,'qwe','你好']方法要点描述a.append(x)增加元......
  • tips in windows/ 1.windows文件路径最长限制
    1.windows文件路径最长限制场景:在用文件资源管理器删除名称超过255字符的文件(文件名最大字符限制就是255)时,发现删除不了,也没反应原因:windows删除调用的是explorer,对路径限制不能超过260,此时超过了,但又由于是应用层,所以不会直接给以报错。使用杀毒软件可以是因为他们调用的是......