LeetCode:122. 买卖股票的最佳时机 II - 力扣(LeetCode)
1.思路
将利润拆解,算出当天比前一天多的数,如果是正数就加上该数,表示前一天买入当天卖出,否则就加0,表示这两天不买不卖。
2.代码实现
class Solution {
public int maxProfit(int[] prices) {
// 最大利润:sum
int sum = 0;
for (int i = 1; i < prices.length; i++) {
sum += Math.max(prices[i] - prices[i - 1], 0);
}
return sum;
}
}
3.复杂度分析
时间复杂度:O(n).
空间复杂度:O(1).
LeetCode:55. 跳跃游戏 - 力扣(LeetCode)
1.思路
2.代码实现
class Solution {
public boolean canJump(int[] nums) {
// if (nums.length == 1) {
// return true;
// }
int count = 0;
// count 作为边界值很关键,表示能够到达的最大索引位置
for (int i = 0; i <= count; i++) {
count = Math.max(nums[i] + i, count);
if (count >= nums.length - 1) {
return true;
}
}
return false;
}
}
3.复杂度分析
时间复杂度:O(n).
空间复杂度:O(1).
LeetCode:45. 跳跃游戏 II - 力扣(LeetCode)
1.思路
采取覆盖的思路,在当前步伐内的最大覆盖度内进行遍历,找出当前覆盖度下的最大覆盖度是否大于数组长度,当大于等于数组索引时,将count输出,当到达当前覆盖范围结尾处且未到达终点位置时,更新当前覆盖范围,且让步数+1操作。遍历输出最小步数。
2.代码实现
class Solution {
public int jump(int[] nums) {
if (nums == null || nums.length == 0 || nums.length == 1) {
return 0;
}
// 计数器,表示走的步数
int count = 0;
// 当前覆盖范围
int curCover = 0;
// 最大覆盖范围
int maxCover = 0;
for (int i = 0; i < nums.length; i++) {
// 遍历,记录当前覆盖范围下到达的最远距离
maxCover = Math.max(maxCover, i + nums[i]);
// 如果当前记录下的最远覆盖距离大于等于数组最后一个元素
if (maxCover >= nums.length - 1) {
count++;
break;
}
// 到达当前覆盖范围结尾处且未走到结尾处,更新下一步可达的最大区域
if (i == curCover) {
curCover = maxCover;
count++;
}
}
return count;
}
}
3.复杂度分析
时间复杂度:O(n).
空间复杂度:O(1).