leetcode 初级算法 动态规划

动态规划

    • 爬楼梯
    • 买卖股票的最佳时机
    • 最大子序和
    • 打家劫舍

爬楼梯

思路:
n=1,只能一步到。
n=2,两种方法。
n=3,要不走一步,要不走两步。
n=4,同上
AC代码:

class Solution {
public:
    int climbStairs(int n) {
        int methods[n+1];
        if(n==1) return 1;
        if(n==2) return 2;
        methods [1] = 1;
        methods[2] = 2;
        for(int i =3;i<=n;i++)
        {
            methods[i] = methods[i-1]+methods[i-2];
        }
        return methods[n];
    }
};

买卖股票的最佳时机

AC代码:

class Solution {
public:
    int maxProfit(vector& prices) {
        int len = prices.size();
        if(len==0) return 0;
        int profit[len];
        profit[0] = 0;
        for(int i =1;imaxPro)
                    maxPro = prices[i]-prices[j];
            }
            profit[i] = maxPro>profit[i-1]?maxPro:profit[i-1];
        }
        return profit[len-1];
    }
};

最大子序和

打家劫舍

AC代码:

class Solution {
public:
    int rob(vector& nums) {
        int len = nums.size();
        if(len==0) return 0;
        int vis[len],notvis[len];
        vis[0] = nums[0];
        notvis[0] = 0;
        for(int i = 1;ivis[i-1]?notvis[i-1]:vis[i-1];
            vis[i] = notvis[i-1]+nums[i];
        }
        return notvis[len-1]>vis[len-1]?notvis[len-1]:vis[len-1];
    }
};

你可能感兴趣的:(leetcode算法题目)