10.I斐波那契数列
//其实可以将matrix的最大值设为n。
var fib = function(n) {
let matrix = [];
matrix.push(0);
matrix.push(1);
for(let i = 2;i<=100;i++){
//for(let i = 2;i<=n;i++){
matrix.push((matrix[i-1]+matrix[i-2])%(1e9+7));
}
return matrix[n];
};
10.II青蛙跳台阶问题
//斐波那契数列也可以改成这种写法,不需要借用数组。
var numWays = function(n) {
if(n<2) return 1;
let pre = 0;
let cur = 1;
let res = pre+cur;
while(n--){
res = (pre+cur)%(1e9+7);
pre = cur;
cur = res;
}
return res;
};
63.股票的最大利润
var maxProfit = function(prices) {
if(prices.length<=1) return 0;
let minPrice = prices[0];
let maxProfit = Number.MIN_SAFE_INTEGER;
for(let i =1;i<prices.length;i++){
minPrice = Math.min(minPrice,prices[i]);
maxProfit = Math.max(maxProfit, prices[i]-minPrice);
}
return maxProfit>0?maxProfit:0;
};
42.连续子数组的最大和
//再写十遍还是不记得...pre一定是连续的,max就是连续的最大值。
var maxSubArray = function(nums) {
let max = nums[0];
let pre = nums[0];
for(let i =1;i<nums.length;i++){
pre = Math.max(pre+nums[i], nums[i]);
max = Math.max(pre, max);
}
return max;
};
47.礼物的最大价值
var maxValue = function(grid) {
let m = grid.length;
if(!m) return 0;
let n = grid[0].length;
if(!n) return 0;
let res = Array(m+1).fill(Array(n+1).fill(0));
for(let i = 1;i<=m;i++){
for(let j =1;j<=n;j++){
res[i][j] = Math.max(res[i][j-1],res[i-1][j])+grid[i-1][j-1];
}
}
return res[m][n];
};