【剑指offer】动态规划题目

本文介绍了七个经典的算法问题,包括连续子数组的最大和、跳台阶问题的多种解法、斐波那契数列的计算、矩形覆盖的优化以及股票买卖的最佳策略。通过这些算法,探讨了动态规划和递归在解决实际问题中的应用,旨在提升读者的编程思维和算法能力。
摘要由CSDN通过智能技术生成

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值