力扣刷题 day43:10-13

1.完全平方数

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。

完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。力扣刷题 day43:10-13_第1张图片

方法一:动态规划 

#方法一:动态规划
def numSquares(n):
    dp=[i for i in range(n+1)]  #dp[i] 表示和为i的最小完全平方数
    for i in range(2,n+1):
        for j in range(1,int(i**0.5)+1):
            dp[i]=min(dp[i],dp[i-j*j]+1)   #状态转移方程,等于前面数的最小完全平方数加上j*j这个本来就是的即+1
    return dp[-1]

2.最长递增子序列 

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。力扣刷题 day43:10-13_第2张图片

方法一:动态规划 

#方法一:动态规划
def lengthOfLIS(nums):
    dp=[1 for i in range(len(nums))]  #dp[i] 表示以i位置结尾的最长递增子序列
    res=0
    for i in range(len(nums)):
        for j in range(i):
            if nums[j]

3.买卖股票的最佳时机含冷冻期 

给定一个整数数组prices,其中第  prices[i] 表示第 i 天的股票价格 。​

设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。力扣刷题 day43:10-13_第3张图片

方法一:动态规划 

#方法一:动态规划
def maxProfit(prices):
    dp0,dp1,dp2=0,float('-inf'),-prices[0] #dp0表示没有股票且不在冷冻期,dp1表示在冷冻期,dp2表示持有股票所得的利益
    for i in range(1,len(prices)):
      #dp0下一个状态 #dp1 卖出去了#dp2 要么不卖出去,要么买入
        dp0,dp1,dp2=max(dp0,dp1),dp2+prices[i], max(dp0 - prices[i],dp2)
    return max(dp0,dp1,dp2)

你可能感兴趣的:(力扣刷题,leetcode,算法,数据结构)