LeetCode122 买卖股票的最佳时机II
代码:
public class code122 {
public int maxProfit(int[] prices) {
int res = 0;
for (int i = 1; i < prices.length; i++) {
res += Math.max(prices[i] - prices[i - 1], 0);
}
return res;
}
}
LeetCode55 跳跃游戏
题目链接:https://programmercarl.com/0055.%E8%B7%B3%E8%B7%83%E6%B8%B8%E6%88%8F.html
代码:
public class code55 {
public boolean canJump(int[] nums) {
int cover = 0;
for (int i = 0; i <= cover; i++) {
cover = Math.max(i + nums[i], cover);
if (cover >= nums.length - 1) {
return true;
}
}
return false;
}
}
LeetCode45 跳跃游戏II
题目链接:https://programmercarl.com/0045.%E8%B7%B3%E8%B7%83%E6%B8%B8%E6%88%8FII.html
代码:
public class code45 {
public int jump(int[] nums) {
if (nums.length == 1) return 0;
// 记录步数
int count = 0;
// 当前覆盖的范围
int curCover = 0;
// 下一步可覆盖的范围
int nextCover = 0;
for (int i = 0; i < nums.length; i++) {
nextCover = Math.max(nextCover, i + nums[i]);
// 如果下一步的覆盖范围可以到达终点,步数加一,然后break
if (nextCover >= nums.length - 1) {
count++;
break;
}
// 走到当前覆盖的最远的地点,更新最大的覆盖范围
if (i == curCover) {
count++;
curCover = nextCover;
}
}
return count;
}
}
LeetCode1005 K次取反后最大化的数组和
代码:
public class code1005 {
public int largestSumAfterKNegations(int[] nums, int k) {
// 将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小
nums = IntStream.of(nums)
.boxed()
.sorted((o1, o2) -> Math.abs(o2) - Math.abs(o1))
.mapToInt(Integer::intValue).toArray();
int len = nums.length;
for (int i = 0; i < len; i++) {
//从前向后遍历,遇到负数将其变为正数,同时K--
if (nums[i] < 0 && k > 0) {
nums[i] = -nums[i];
k--;
}
}
// 如果K还大于0,那么反复转变数值最小的元素,将K用完
if (k % 2 == 1) nums[len - 1] = -nums[len - 1];
return Arrays.stream(nums).sum();
}
}