classSolution:deflengthOfLIS(self,nums: List[int])->int:defhelper(pre,cur):if cur ==len(nums):return0 taken =0if nums[cur]> pre: taken =1+helper(nums[cur], cur+1) untaken =helper(pre, cur+1)returnmax(taken, untaken)returnhelper(float('-inf'),0)
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
size = len(nums)
if size <= 1:
return size
dp = [1]*size
res = 1
for i in range(1, size):
for j in range(0, i):
if nums[i] > nums[j]:
dp[i] = max(dp[i], dp[j]+1)
res = max(res, dp[i])
return res
var lengthOfLIS = function(nums) {
const len = nums.length
if (len <= 1) {
return len
}
let dp = new Array(len);
for (let i = 0; i < len; i++) {
dp[i] = 1
}
let ans = 1
for (let i = 1; i < len; i++) {
for (let j = 0; j < i; j++) {
if (nums[i] > nums[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1)
}
}
ans = Math.max(ans, dp[i])
}
return ans
};
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
top = [0]*len(nums)
piles = 0
for i in range(0, len(nums)):
left = 0
right = piles
while left < right:
mid = (left+right) >> 1
if top[mid] < nums[i]:
left = mid+1
else:
right = mid
if left == piles:
piles += 1
top[left] = nums[i]
return piles