122.买卖股票的最佳时机 II
122. 买卖股票的最佳时机 II
思路比较简单
class Solution {
public int maxProfit(int[] prices) {
int res=0,sum=0;
for(int i=0;i<prices.length-1;i++){
if(prices[i+1]-prices[i]>0){
sum+=prices[i+1]-prices[i];
}
res=sum>res?sum:res;
}
return res;
}
}
55. 跳跃游戏
思路:贪心,index是能到达的最远下标,思路比较简单
代码实现
class Solution {
public boolean canJump(int[] nums) {
if (nums.length == 1) return true; // 只有一个元素,就是能达到
if(nums[0]==0) return false;
int index=0;
for(int i=0;i<=index;i++){//这里要i<=index,而不是nums.length-1
index=Math.max(index,i+nums[i]);
if(index>=nums.length-1){return true;}
}
return false;
}
}
45. 跳跃游戏 II
45. 跳跃游戏 II
思路:第2遍做了,还是不会我哭
再次深刻写下详细的注释
class Solution {
public int jump(int[] nums) {
int count=0;
int end=0;//记录
int maxposition=0;//记录下一次跳跃能到达的最大下标
//注意点1 遍历数组不用遍历到nums[len-1],为什么?因为到最后我们的end其实是>=len-1的,如果让i==len-1而恰巧此时的en刚好也是len-1的话,就平白增加一次count
//注意点2 一个一个遍历,为什么要一个一个遍历?因为从下标i到最远位置,每个下标x的nums[x]都未知,谁知道哪个下标才是这个范围中最大的,因此我们需要遍历
for(int i=0;i<nums.length-1;i++){
maxposition=Math.max(maxposition,i+nums[i]);//从下标i出发能到达的最远位置
if(end==i){//说明就是从下标i-->最远位置都遍历过了,这个时候就可以放心地更新end来确定最远位置
end=maxposition;
count++;
}
if(end>=nums.length-1){
return count;
}
}
return 0;
}
}