【剑指offer】动态规划题目

1.连续子数组的和

在这里插入图片描述

class Solution:
    def FindGreatestSumOfSubArray(self , array: List[int]) -> int:
        # write code here
        for i in range(1,len(array)):
            array[i] += max(array[i-1], 0)
        return max(array)

2.连续子数组最大和(二)

在这里插入图片描述

class Solution:
    def FindGreatestSumOfSubArray(self , array: List[int]) -> List[int]:
        # write code here
        left = 0
        right = 0
        bl = 0
        br = 0
        maxn = array[0]
        
        temp = [0 for i in range(len(array))]
        temp[0] = array[0]
        
        for i in range(1,len(array)):
            right += 1
            temp[i] = max(array[i], temp[i-1]+array[i])
            if temp[i-1] < 0:
                left = right
            
            if temp[i] > maxn or temp[i] == maxn and (right - left) > (br - bl):
                bl = left
                br = right
                maxn = temp[i]
                
                
        res = []
        for i in range(bl, br+1):
            res.append(array[i])
        return res

3.跳台阶

在这里插入图片描述

class Solution:
        
    def jumpFloor(self , number: int) -> int:
        # write code here
        res = [0 for i in range(number+1)]
        res[0] = 1
        res[1] = 1
        for i in range(2,number+1):
            res[i] = res[i-1] + res[i-2]
        return res[-1]

4.斐波那契数

在这里插入图片描述

class Solution:

    def Fibonacci(self , n: int) -> int:
        # write code here
        array = [0 for i in range(n)]
        array[0], array[1] = 1, 1
        for i in range(2,n):
            array[i] = array[i-1] + array[i-2]
        return array[-1]

5.跳台阶(二)

在这里插入图片描述

class Solution:
    def jumpFloorII(self , number: int) -> int:
        # write code here
        res = [0 for i in range(number+1)]
        res[0], res[1] = 1, 1
        for i in range(2,number+1):
            res[i] = sum(res[0:i])
        return res[-1]

6.矩形覆盖

class Solution:
    def rectCover(self , number: int) -> int:
        # write code here
        if number == 0: return 0
        array = [0 for i in range(number+1)]
        array[0] = 1
        array[1] = 1
        for i in range(2,number+1):
            array[i] = array[i-1] + array[i-2]
        return array[-1]

7.买股票问题

class Solution:
    def maxProfit(self , prices: List[int]) -> int:
        # write code here
        cost, priced = float('+inf'), 0
        for price in prices:
            cost = min(cost, price)
            priced = max(priced, price-cost)
        return priced

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...