题目:给定一个无序的整数数组,找到其中最长上升子序列的长度。 输入:[10,9,2,5,3,7,101,18] 输出:4 解释:最长的上升子序列是 [2,3,7,101],它的长度是 4。 思路:动态规划 状态: 1 dp[i]表示一定将i纳入最长子序列时最长子序列的长度 分析: 对于j from 0 to i: 如果nums[i] > nums[j], 则dp[j]更新,选择最大的 状态转移: 12 if nums[i] > nums[j]: dp[i] = max(dp[i], dp[j] +1) 代码: 1234567891011121314151617181920 class : def lengthOfLIS(self, nums): """ :type nums: List[int] :rtype: int """ if not nums: return 0 n = len(nums) dp = [1 for x in range(n)] for i in range(n): for j in range(i): if nums[i] > nums[j]: dp[i] = max(dp[i], dp[j] + 1) return max(dp)# 例子a = [10, 9, 2, 5, 3, 7, 101, 18]print(Solution().lengthOfLIS(a)) 赞微海报分享
近期评论