力扣题目 122.买卖股票的最佳时机 Ⅱ
class Solution {
public int maxProfit(int[] prices) {
int length = prices.length;
int sum = 0;
for(int i=1; i<length; i++){
int temp = prices[i] - prices[i-1];
sum += Math.max(temp,0);
}
return sum;
}
}
力扣题目 55.跳跃游戏
错误的解法
应该要考虑特殊的情况,例如:nums={0};或者 nums={1,2};或者 nums={0,1}等特殊情况
由第一个元素为0的时候可以得出结论,应该在覆盖的范围里面更新覆盖范围,这样当
nums={0,2,3}结果才会对
class Solution {
public boolean canJump(int[] nums) {
//这里记录下标,就是用来判断覆盖的长度
int index = nums.length - 1;
int cover = nums[0];
if(nums.length == 1)
return true;
//这里不需要等号,因为i到达最后一个位置的时候也不能跳
for(int i=1; i<index; i++){
cover = Math.max(i+nums[i], cover);
if(cover >= index)
return true;
}
return false;
}
}
正确的解法
class Solution {
public boolean canJump(int[] nums) {
//这里记录下标,就是用来判断覆盖的长度
int index = nums.length - 1;
int cover = 0;
if(nums.length == 1)
return true;
//这里不需要等号,因为i到达最后一个位置的时候也不能跳
for(int i=0; i<=cover; i++){
cover = Math.max(i+nums[i], cover);
if(cover >= index)
return true;
}
return false;
}
}
力扣题目 45.跳跃游戏 Ⅱ
class Solution {
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;
//因为题意已经表明肯定可以走到终点,所以是可以直接用数组的大小来确定i的范围
//上一题并不是可以都可以走到终点,所以不可以这样写
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;
}
}