[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;
}
}