提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Leetcode
122.买卖股票的最佳时机II
● 今日学习的Leetcode链接
● 自己看到题目的第一想法
因为可以在同一天买进卖出,所以只要今天比昨天大,就代表昨天可以买入,也就是直接利润加今天-昨天
● 看完代码随想录之后的想法
一样
● 自己实现过程中遇到哪些困难
思路不好想,题目条件描述的不太精准
● 今日收获,记录一下自己的学习时长
很快
public int maxProfit(int[] prices) {
if(prices.length == 1){
return 0;
}
int count = 0;
for(int i=1;i<prices.length;i++){
if(prices[i]>prices[i-1]){
count += prices[i]-prices[i-1];
}
}
return count;
}
55. 跳跃游戏
● 今日学习的Leetcode链接
● 自己看到题目的第一想法
每次都跳到现在能跳的最远位置(错误)[2,5,0,0]
● 看完代码随想录之后的想法
- 关键在于可跳的覆盖范围,要一步一比较,不能跳过,因为这样可能不是最远的结果
- 每走一步,就比较上一次的最远的下标和当前最远的下标。
- for循环的终止条件应该是最远距离的下标,而不应该是数组的length
● 自己实现过程中遇到哪些困难
没有思路
● 今日收获,记录一下自己的学习时长
长
public boolean canJump(int[] nums) {
if(nums.length==1){
return true;
}
int maxIndex = 0;
for(int i = 0;i<=maxIndex;i++){
maxIndex = Math.max(maxIndex,i+nums[i]);
if(maxIndex>=nums.length-1){
return true;
}
}
return false;
}
45. 跳跃游戏 II
● 今日学习的Leetcode链接
● 自己看到题目的第一想法
没有注意题目要求的两个点
- 一定会到达终点
- 在前边题的基础上,要求了最小步数
● 看完代码随想录之后的想法
只需记录每次的最大值,不需要知道是哪一步跳出的当前范围下标。只要当前下标走不下去了,范围就换成目前最大下标,并且步数+1
● 自己实现过程中遇到哪些困难
完全没思路
● 今日收获,记录一下自己的学习时长
很长
public int jump(int[] nums) {
if (nums == null || nums.length == 0 || nums.length == 1) {
return 0;
}
//记录跳跃的次数
int count=0;
//当前的覆盖最大区域
int curDistance = 0;
//最大的覆盖区域
int maxDistance = 0;
for (int i = 0; i < nums.length; i++) {
//在可覆盖区域内更新最大的覆盖区域
maxDistance = Math.max(maxDistance,i+nums[i]);
//说明当前一步,再跳一步就到达了末尾
if (maxDistance>=nums.length-1){
count++;
break;
}
//走到当前覆盖的最大区域时,更新下一步可达的最大区域
if (i==curDistance){
curDistance = maxDistance;
count++;
}
}
return count;
}