LeetCode 122 买卖股票的最佳时期
本题思路:记录每天的利润值,第一天的为 0 ,第二天的当天的减去前一天的。然后遍历相加为正的利润值。最后得到的结果就是最大利润。
class Solution {public int maxProfit(int[] prices) {int res = 0;for(int i = 1; i < prices.length; i++){if(prices[i] - prices[i-1] >= 0){res += (prices[i] - prices[i-1]);}}return res;}
}
LeetCode 55 跳跃游戏
本题思路:记录每一步的覆盖区域,并随时更新覆盖区域。如果覆盖区域大于等于 nums.length - 1。就说明能跳到末尾去。
class Solution {public boolean canJump(int[] nums) {if(nums.length == 1){return true;}int cover = 0;// 关键之处在于覆盖范围for(int i = 0; i <= cover ; i++){cover = Math.max(cover, i + nums[i]);if(cover >= nums.length-1){return true;}}return false;}
}
LeetCode 45 跳跃游戏||
本题思路:主要是以下几个
- 每走一步记录最大的一个覆盖范围
- 当 i 遍历到当前的最大覆盖范围的时候
- 如果 i 不等于 nums.length-1的时候,说明还没到末尾,此时就 res++ 说明移动了一次
- 就要更新当前的覆盖范围为最大覆盖范围
- 并且如果当前覆盖范围大于等于 nums.length - 1,就要break,退出遍历数组
class Solution {public int jump(int[] nums) {if(nums.length == 1){return 0;}int cur = 0;int next = 0;int res = 0;for(int i = 0; i < nums.length; i++){// 最大覆盖范围next = Math.max(i + nums[i], next);// 如果当前 i 已经到达了 cur 覆盖区域if(i == cur){// 并且不是数组末尾if( cur != nums.length-1){res++;// 更新 cur 值,最大覆盖范围cur = next;if(cur >= nums.length - 1){break;}}}}return res;}
}