提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
大家会发现本周的代码其实都简单,但思路却很巧妙,并不容易写出来。 如果是第一次接触的话,其实很难想出来,就是接触过之后就会了,所以大家不用感觉自己想不出来而烦躁。
一、力扣122. 买卖股票的最佳时机 II
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;
}
}
二、力扣55. 跳跃游戏
class Solution {
public boolean canJump(int[] nums) {
int len = nums[0], index = 0;
for(int i = 0; i < nums.length; ){
for(int j = i; j < nums.length && j <= i + nums[i]; j ++){
int temp = nums[j] + j;
if(temp > index + nums[index]){
index = j;
len = nums[j];
}
}
if(index + nums[index] >= nums.length-1){
return true;
}
if(index + nums[index] == i + nums[i]){
return false;
}
i = index;
}
return true;
}
}
三、力扣45. 跳跃游戏 II
class Solution {
public int jump(int[] nums) {
int res = 0, index = 0;
if(nums.length == 1){
return 0;
}
if(nums[0] >= nums.length-1){
return 1;
}
for(int i = 0; i < nums.length; ){
for(int j = i; j < nums.length && j <= nums[i]+i; j ++){
int temp = nums[j] +j;
if(temp > index +nums[index]){
index = j;
}
}
res ++;
if(index+nums[index] >= nums.length-1){
return ++res;
}
i = index;
}
return res;
}
}
四、力扣1005.K次取反后最大化的数组和
class Solution {
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();
}
}
本文介绍了四个力扣LeetCode题目:买卖股票的最佳时机II,跳跃游戏和其变体,以及K次取反后最大化数组和的方法。通过实例代码展示了巧妙的编程思路和动态规划在解决这些问题中的应用。
881

被折叠的 条评论
为什么被折叠?



