剑指offer计划8(动态规划简单版)---java

1.1、题目1

剑指 Offer 10- I. 斐波那契数列

1.2、解法

斐波那契数列,滚动数组解决,这题有个最大值的限制,记得mod

1.3、代码

class Solution {
    public int fib(int n) {
        final int M = 1000000007;
        if(n==0 || n==1) return n;
        int a = 0 ,b =1,c;
        for(int i =2;i<=n;i++){
            c=(a+b)%M;
            a=b;
            b=c;
        }
        return b;
    }
}

2.1、题目2

剑指 Offer 10- II. 青蛙跳台阶问题

难度简单195

2.2、解法

上题同理

2.3、代码

class Solution {
    public int numWays(int n) {
        final int M=1000000007;
        int a=1,b=1,c;
        for(int i=2;i<=n;i++){
            c=(a+b)%M;
            a=b;b=c;
        }
        return b;
    }
}

3.1、题目3

剑指 Offer 63. 股票的最大利润

3.2、解法

第一种

暴力破解,这种直接全部都判断就解决了

第二种

动态规划,一次遍历,找到最小值,同时寻找利润最高点

3.3、代码

第一种

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

}

第二种

class Solution {
    public int maxProfit(int[] prices) {
        int pro=0,min=Integer.MAX_VALUE;
        for(int price:prices){
            min=Math.min(min,price);
            pro=Math.max(pro,price-min);
        }
        return pro;
    }

}
posted @ 2021-09-08 15:07  程序员khaos  阅读(42)  评论(0编辑  收藏  举报