微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【剑指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

原文地址:https://www.jb51.cc/wenti/3281923.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐