funclengthOfLIS(nums []int)int { result := 0; length := len(nums); dp := make([]int, length); for j := 0; j < length; j++{ dp[j] = 1; for i := 0; i < j; i++{ if nums[i] < nums[j]{ if dp[i]+1 > dp[j]{ dp[j] = dp[i]+1; } } } if dp[j] > result{ result = dp[j]; } } return result;
}
python3语言版本
1 2 3 4 5 6 7 8 9 10
class Solution: def lengthOfLIS(self, nums: List[int]) -> int: result = 0 dp = [1]*len(nums) forj in range(0, len(nums)): for i in range(0, j): if nums[i] < nums[j] anddp[i]+1 > dp[j]: dp[j] = dp[i]+1 result = dp[j] ifdp[j] > result else result return result
二分查找
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
class Solution: def lengthOfLIS(self, nums: List[int]) -> int: # 开一个栈,每次取栈顶元素top和读到的元素temp做比较,如果temp > top 则将temp入栈;如果temp < top则二分查找栈中的比temp大的第1个数,并用temp替换它。 最长序列长度即为栈的大小top。 stack = list() forein nums: if not stack or stack[-1] < e: stack.append(e) else: # 二分查找,寻找第一个大于e的数 low = 0 high = len(stack) - 1 while low <= high: mid = low + (high-low)//2 ife > stack[mid]: low = mid + 1 else: high = mid -1 stack[low] = e return len(stack)