目录
前沿:撰写博客的目的是为了再刷时回顾和进一步完善,其次才是以教为学,所以如果有些博客写的较简陋,是为了保持进度不得已而为之,还请大家多多见谅。
预:看到题目后的思路和实现的代码。
见:参考答案展示。
感思:对比答案后的思考,与之前做过的题目是否有关联。
行:
(1)对于没做出来的题目,阅读答案后重新做一遍;
(2)下次做题可以尝试改善的方向;
(3)有助于理解的相关的题目
优先级:做题进度>学习&总结>默写回顾>做题数量
题目回顾
1.跳跃游戏
题目链接:55. 跳跃游戏
是否能够跳到,只要一直遍历当前最大范围停止后若大于长度则可。
则while循环直至当前最大跳的位置,
while循环内比较能够跳的范围中又能跳到的最大距离,并赋值为当前最大跳的位置。
class Solution {
public boolean canJump(int[] nums) {
int len = nums.length;
if(len == 1){
return true;
}
if(nums[0] == 0){
return false;
}
int index = nums[0];
int i = 1;
while(i <= index && index < (len-1)){
index = Math.max(index,nums[i]+i);
i++;
}
return index >= (len-1);
}
}
2.跳跃游戏II
题目链接:45.跳跃游戏II
在I的基础上,while循环内创建临时变量存储当前跳跃最大范围
再内创建for循环:临时变量遍历内都算在跳一次内能涉及的最大范围
每循环一次while则相对于跳了一次
class Solution {
public int jump(int[] nums) {
int len = nums.length;
if(len == 1){
return 0;
}
if(nums[0] == 0){
return -1;
}
int index = nums[0];
int i = 1;
int count = 1;
while(i <= index && index < len-1){
count++;
int temp = index;
while(i <= temp && index < len-1){
index = Math.max(index,nums[i]+i);
i++;
}
}
return count;
}
}
理解答案后实现
class Solution {
public int jump(int[] nums) {
if(nums.length == 1){
return 0;
}
int maxRange = 0;
int curRange = 0;
int count = 0;
for(int i = 0;i < nums.length;i++){
maxRange = maxRange > i+nums[i] ? maxRange:i+nums[i];
if(maxRange >= nums.length-1){
count++;
return count;
}
if(i == curRange){
count++;
curRange = maxRange;
}
}
return count;
}
}
3.买卖股票的最佳时机II
题目链接:122.买卖股票的最佳时机II
class Solution {
public int maxProfit(int[] prices) {
int slow = prices[0];
int fast = slow;
int sum = 0;
for(int i = 1;i < prices.length;i++){
if(prices[i] > prices[i-1]){
fast = prices[i];
}else if(prices[i] < prices[i-1]){
if(fast > slow){
sum += fast-slow;
// System.out.println(sum);
}
slow = prices[i];
fast = slow;
}
}
if(fast > slow){
sum += fast-slow;
}
return sum;
}
}