学习目标:
每天复习代码随想录上的题目2-3道算法(时间充足可以继续)
今日碎碎念:
1)进入贪心与dp专题,过完准备二刷,以及刷剑指offer。
2)今天开始整理八股啦
3)坚持住吧,秋招马上来了!
力扣刷题
算法
力扣122:122. 买卖股票的最佳时机 II
解答思路:
1)dp来做,当然贪心算法也能做。
class Solution {
public int maxProfit(int[] prices) {
int len = prices.length;
//dp[i][0]:第i天持有股票拥有的最多现金
//dp[i][1]:第i天持有的最多现金
int[][]dp = new int[len][2];
//初始化
dp[0][1] = 0;
dp[0][0] = -prices[0];
for(int i = 1;i<len;i++){
dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1]-prices[i]);
dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]+prices[i]);
}
return Math.max(dp[len-1][0],dp[len-1][1]);
}
}
力扣55:55. 跳跃游戏
class Solution {
public int wiggleMaxLength(int[] nums) {
if(nums.length <= 1) return nums.length;
//思路:我们选取极值,三种情况这里就不展开了
int curDiff = 0;
int preDiff = 0;
// 记录峰值个数,序列默认序列最右边有一个峰值
int res = 1;
for(int i = 0;i<nums.length-1;i++){
//计算当前差值
curDiff = nums[i+1] - nums[i];
//什么时候才要替换?
//前:正/0,当前:负,前:负/0,当前:正
if((preDiff>=0 && curDiff<0) || (preDiff<=0 && curDiff>0)){
res++;
preDiff = curDiff;
}
}
return res;
}
}
力扣509:509. 斐波那契数
class Solution {
public int fib(int n) {
if(n == 0) return 0;
if(n == 1) return 1;
int[]dp = new int[n+1];
dp[0] = 0;
dp[1] = 1;
for(int i = 2;i<=n;i++){
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
}