• 力扣刷题 day43:10-13


    1.完全平方数

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

    完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。

    方法一:动态规划 

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

    2.最长递增子序列 

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

    子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

    方法一:动态规划 

    1. #方法一:动态规划
    2. def lengthOfLIS(nums):
    3. dp=[1 for i in range(len(nums))] #dp[i] 表示以i位置结尾的最长递增子序列
    4. res=0
    5. for i in range(len(nums)):
    6. for j in range(i):
    7. if nums[j]
    8. dp[i]=max(dp[j]+1,dp[i]) #找到之前比当前位置元素小的
    9. res=max(res,dp[i])
    10. return res

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

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

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

    卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
    注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

    方法一:动态规划 

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

  • 相关阅读:
    《架构师说》第五期,DPU 正在掀起数据中心变革!
    Day710.文字块-Java8后最重要新特性
    shiny | 使用R创建一个网页应用(Web App)
    【C++】C++11 ——lambda表达式
    Java虚拟机(JVM)-- Dump内存快照
    科技创新对农业发展的影响
    lvgl页面管理 简单实现
    会话管理——Cookie和 Session
    [问题解决]解决编译时,Androidx和其他三方库冲突
    C-模型压缩部署概述
  • 原文地址:https://blog.csdn.net/hhhh1ay/article/details/133819762