回顾:
第一种方法(dp)
class Solution(object):
def lengthOfLIS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if not nums:
return 0
dp = [1]*len(nums)
for i in range(1,len(nums)):
for j in range(i):
if nums[i] > nums[j]:
dp[i] = max(dp[i],dp[j]+1)
return max(dp)
第二种方法(二分)
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
c = [0]*len(nums)
size = 0
for num in nums:
i,j = 0,size
while i!=j:
m = (i+j) // 2
if c[m] < num:
i = m+1
else:
j = m
c[i] = num
size = max(size,i+1)
return size
class Solution(object):
def change(self, amount, coins):
"""
:type amount: int
:type coins: List[int]
:rtype: int
"""
dp = [0]*(amount+1)
dp[0]=1
for coin in coins:
for i in range(amount):
if i+coin <=amount:
dp[i+coin]+=dp[i]
return dp[-1]