加载中...

[leetcode]第 8 天 动态规划(简单)

I. 斐波那契数列

思路

使用到了动态规划,最核心的思想,就在于拆分子问题,记住过往,减少重复计算。

class Solution {
    public int fib(int n) {
        int a = 0, b = 1, sum;
        for(int i = 0; i < n; i++){
            sum = (a + b) % 1000000007;
            a = b;
            b = sum;
        }
        return a;
    }
}

II. 青蛙跳台阶问题

思路

和之前那个一样,但是学到了备忘录法,就是自顶向下的方法

class Solution {
    Map<Integer, Integer> tempMap = new HashMap();
    public int numWays(int n) {
        if (n == 0) {
            return 1;
        }
        if (n <= 2) {
            return n;
        }

        if (tempMap.containsKey(n)) {
            return tempMap.get(n);
        } else {
            tempMap.put(n, (numWays(n - 1) + numWays(n - 2)) % 1000000007);
            return tempMap.get(n);
        }
    } 
}

63. 股票的最大利润

思路

class Solution {
    public int maxProfit(int[] prices) {
        int cost = Integer.MAX_VALUE, profit = 0;
        for(int price : prices) {
            cost = Math.min(cost, price);
            profit = Math.max(profit, price - cost);
        }
        return profit;
    }
}
posted @ 2022-12-28 18:07  Vincy9501  阅读(13)  评论(0编辑  收藏  举报