渣渣的Leetcode之旅(Python3)_300.最长上升子序列
2021-03-17 06:27
标签:com col color python 大于 image pretty print sha 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 注意: 方法1: 方法2: 如果找到比他大的数,此位置的最大上升子序列为那个位置的记录加上1,如下图: 求得最大上升子序列的长度为4。 本题代码如下:
输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
如果输入[]的话,自然输出0
如果输入[1]或者[2]之类包含一个值的输入,应该输出1,一开始我以为是也是输出0,看了半天
暴力,将每一位上的数字与在它后面的所有数字一一比较。
这么做思路清晰简单,但大概率会超时。
动态规划,具体思路参考:https://blog.csdn.net/qq_38175040/article/details/109468948
从末端开始,依次向前遍历。每个位置上的最长上升序列都记录下来。(最后一位为1)
4
每个位置上的数都与他后面的一一比较,直到找到一个大于他的数或者一直比较到结束也没有找到比他大的数。
如果一直到结束也没有比他大的数,那这个位置的最大上升序列记为1,参考76,67两个位置上以及最后一个位置上的数字。
以此类推,直到:class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
ans = 0
if len(nums) == 0:
return 0
nums_01 = [0]*len(nums)
middle = 0
nums_01[len(nums)-1] = 1
for i in range(len(nums)-2,-1,-1): #从数组nums的倒数第二位遍历到nums[0]为止
for j in range(i+1,len(nums)):
if nums[i] [j]:
if nums_01[i] [j] + 1:
nums_01[i] = nums_01[j] + 1
middle = 1
if middle == 0:
nums_01[i] = 1
else :
middle = 0
for i in range(len(nums)):
if ans [i]:
ans = nums_01[i]
return ans
渣渣的Leetcode之旅(Python3)_300.最长上升子序列
标签:com col color python 大于 image pretty print sha
原文地址:https://www.cnblogs.com/336699qiangqiang/p/13983461.html
文章标题:渣渣的Leetcode之旅(Python3)_300.最长上升子序列
文章链接:http://soscw.com/index.php/essay/65194.html