力扣 -动态规划两道题(买卖股票的最佳时机&最大子序和&爬楼梯)


一、买卖股票的最佳时机

链接https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
在这里插入图片描述

1.暴力法

代码如下(示例):

class Solution {
    
    
    public int maxProfit(int[] prices) {
    
    
        if(prices.length<=1){
    
    
            return 0;
        }
        int max = 0;
        for(int j =0;j<prices.length-1;j++){
    
    
            for(int i =j+1;i<prices.length;i++){
    
    
                if(prices[i]-prices[j] > max){
    
    
                    max = prices[i]-prices[j];
            }
        }
        }
        return max;
    }
}

2.dp

代码如下(示例):

class Solution {
    
    
    public int maxProfit(int[] prices) {
    
    
        int max = 0;
        int minprice = prices[0];
        for(int i = 1;i<prices.length;i++){
    
    
            if(prices[i]<minprice){
    
    
                minprice = prices[i];
            }else{
    
    
                if(prices[i]-minprice>max){
    
    
                    max = prices[i] - minprice;
                }
            }
        }
        return max;
    }
}

二、最大子序和

链接:https://leetcode-cn.com/problems/maximum-subarray/
在这里插入图片描述

1.法一

代码如下(示例):

class Solution {
    
    
    public int maxSubArray(int[] nums) {
    
    
        int sum = nums[0];
        int max = nums[0];
        for(int i = 1; i<nums.length; i++){
    
    
            if(sum<0){
    
    
                sum = 0;
            }
            sum = sum + nums[i];
            if(sum>max){
    
    
                max = sum;
            }
        }
        return max;

    }
}

2.dp

代码如下(示例):

class Solution {
    
    
    public int maxSubArray(int[] nums) {
    
    
        int max = nums[0];
        int result = nums[0];
        for(int i = 1; i<nums.length; i++){
    
    
            max = Math.max(max+nums[i],nums[i]);
            result = Math.max(max,result);
        }
        return result;
    }
}

感觉法一的思路和动态规划类似的思想~

三、爬楼梯

链接https://leetcode-cn.com/problems/climbing-stairs/
在这里插入图片描述

1.dp

代码如下(示例):

class Solution {
    
    
    public int climbStairs(int n) {
    
    
        if(n==0){
    
    
            return 0;
        }
        if(n==1){
    
    
            return 1;
        }
        if(n==2){
    
    
            return 2;
        }
        int [] array = new int[n+1];
        array[0]=0;
        array[1]=1;
        array[2]=2;
        for(int i =3;i<array.length;i++){
    
    
            array[i] = array[i-1]+array[i-2];
        }
        return array[n];
    }
}

这道题自己写出来了,哈哈哈。

总结

多刷题,多看思路。

猜你喜欢

转载自blog.csdn.net/slighting1128/article/details/113108192
今日推荐