题解 | #最长上升子序列(一)#

最长上升子序列(一)

https://www.nowcoder.com/practice/5164f38b67f846fb8699e9352695cd2f

package main


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 给定数组的最长严格上升子序列的长度。
 * @param arr int整型一维数组 给定的数组
 * @return int整型
 */
func LIS(arr []int) int {
	// write code here
	if len(arr) < 2 {
		return len(arr)
	}
	dpLen := make([]int, len(arr))
	dpLen[0] = 1
	for i := 1; i < len(arr); i++ {
		smallerValPos := -1
		tmp := 0
		for j := i - 1; j >= 0; j-- {
			if arr[i] >= arr[j] {
				//i和j之间是递增序列关系;
				if dpLen[j] > tmp {
					smallerValPos = j
					tmp = dpLen[j]
				}
			}
		}
		//前面符合条件的最长序列结尾元素位置a
		if smallerValPos == -1 { //没有更小的元素位置
			dpLen[i] = 1
		} else {
			dpLen[i] = tmp + 1
		}
	}
	//遍历一次拿到最长子序列的长度和结尾元素位置
	mxLen := 0
	for i := 0; i < len(dpLen); i++ {
		if dpLen[i] > mxLen {
			mxLen = dpLen[i]
		}
	}
	return mxLen
}

全部评论

相关推荐

02-08 20:56
已编辑
南京工业大学 Java
在等offer的比尔很洒脱:我也是在实习,项目先不说,感觉有点点小熟悉,但是我有点疑问,这第一个实习,公司真的让实习生去部署搭建和引入mq之类的吗,是不是有点过于信任了,我实习过的两个公司都是人家正式早搭好了,根本摸不到部署搭建的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务