五月集训(第28天)——动态规划

前言

今天算法的内容是:动态规划

一、 爬楼梯

         假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:

输入:nums = [1]
输出:1
示例 3:

输入:nums = [5,4,-1,7,8]
输出:23

一、思路:

        (1)如果是三阶以下直接返回即可
        (2)如果是三阶以上则将前两次的状态相加就是当前的状态,循环n次;

二、源码

class Solution {
public:
    int climbStairs(int n) {
        int a=1,b=2,c=0;
        
        if(n<3) return n;

        for(int i=3 ;i<=n ;i++){
                c=a+b;
                a=b;
                b=c;
        }
        return c;
    }
};

三.知识点

        斐波那契数列

二、 最大子数组和

        给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和
子数组 是数组中的一个连续部分。

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:

输入:nums = [1]
输出:1
示例 3:

输入:nums = [5,4,-1,7,8]
输出:23

一、思路:

        (1)过去的状态与下一次的状态相加与下一次状态的进行对比,对比出现在最好的状态
        (2)将过去所记录的最好的状态与现在的状态进行比较,选出最好的状态
        (3)突然想到为什么 状态会 时刻变化呢?那是因为状态会随着循环次数的变化而与下一次状态相加变化着,可能会变弱,也可能会变强

二、源码

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int max=-1000000,now=0;
        
        for(int i=0;i<nums.size();i++){
            now=now+nums[i] > nums[i]?now+nums[i]:nums[i];
            max=max > now?max:now;
        }
        return max;
    }
};
//第一次 超时辣 代码

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int sum=0,max=-100000;
        int len=nums.size();

        for(int i=0 ;i<len ;i++){
            for(int j=i ;j<len ;j++){
                sum+=nums[j];
                if(sum > max){
                    max=sum;
                }        
            }

            sum=0;
        }
        return max;
    }
};

三.知识点

        动态规划

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论

打赏作者

烧蔬菜

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值