剑指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;
}
}