力扣刷题 day09:09-08

1.杨辉三角

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

力扣刷题 day09:09-08_第1张图片方法一:动态规划(找到对应的状态方程)

#方法一:动态规划(找到对应的状态方程)
def generate(numRows):
    dp=[[1]*i for i in range(1,numRows+1)]  #初始化dp数组
    for i in range(numRows):
        for j in range(1,i):
            dp[i][j]=dp[i-1][j-1]+dp[i-1][j]  #等于上一行两个元素之和
    return dp

2.杨辉三角 II

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。力扣刷题 day09:09-08_第2张图片

方法一:动态规划(找到对应的状态方程)

#方法一:动态规划(找到对应的状态方程)
def getRow(rowIndex):
    dp=[[1]*i for i in range(1,rowIndex+2)]
    for i in range(rowIndex+1):
        for j in range(1,i):
            dp[i][j]=dp[i-1][j]+dp[i-1][j-1] #等于上一行两个元素之和
    return dp[rowIndex]

3.买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。力扣刷题 day09:09-08_第3张图片

方法一:贪心算法 

#方法一:贪心算法
def maxProfit(prices):
    cost,profit=float('+inf'),0      #正无穷
    for price in prices:
        cost=min(price,cost)   #获取最小花费
        profit=max(profit,price-cost)  #获取最大利润
    return profit

方法二:动态规划

#方法二:动态规划
def maxProfit(prices):
    if len(prices)==0:
        return 0       #边界情况单独考虑
    minprice=prices[0]  #初始化最小价格
    dp=[0]*len(prices)     #dp[i] 表示第i天的最大利润
    for i in range(1,len(prices)):
        minprice=min(minprice,prices[i])  #求出最小价格
        dp[i]=max(dp[i-1],prices[i]-minprice)      #状态方程      
    return dp[-1] 

你可能感兴趣的:(力扣刷题,leetcode,算法,职场和发展)