算法训练营day27--122.买卖股票的最佳时机II +55. 跳跃游戏 +45.跳跃游戏 II+1005.K次取反后最大化的数组和

一、 122.买卖股票的最佳时机II

题目链接:https://leetcode.cn/problems/binary-search/description/

文章讲解:https://www.programmercarl.com/0122.买卖股票的最佳时机II.html

视频讲解:https://www.bilibili.com/video/BV1ev4y1C7na

1.1 初见思路

  1. 整体利润拆为每天的利润
  2. 只收集每天的正利润即可。

1.2 具体实现

java 复制代码
class Solution {
    public int maxProfit(int[] prices) {
        int result = 0;
        for(int i=1;i<prices.length;i++){
            int curPrice = prices[i]-prices[i-1];
            if(curPrice>0){
                result+=curPrice;
            }
        }
        return result;
    }
}

1.3 重难点

二、 55. 跳跃游戏

题目链接:https://leetcode.cn/problems/jump-game/

文章讲解:https://www.programmercarl.com/0055.跳跃游戏.html

视频讲解:https://www.bilibili.com/video/BV1VG4y1X7kB

2.1 初见思路

  1. 每跳到一个位置上就对应了下次能跳跃的所有范围内。

2.2 具体实现

java 复制代码
class Solution {
    public boolean canJump(int[] nums) {
        if (nums.length == 1) {
            return true;
        }
        //覆盖范围, 初始覆盖范围应该是0,因为下面的迭代是从下标0开始的
        int coverRange = 0;
        //在覆盖范围内更新最大的覆盖范围
        for (int i = 0; i <= coverRange; i++) {
            coverRange = Math.max(coverRange, i + nums[i]);
            if (coverRange >= nums.length - 1) {
                return true;
            }
        }
        return false;
    }
}

2.3 重难点

  • 不要拘泥于我下次应该跳几步?是一步还是两步还是N步
  • 突然想到这个题目好像就是跳楼梯的题目的变种,如果数组所有元素都是2,那么跳跃方式其实就跟跳楼梯的题目一致了。

三、45.跳跃游戏 II

题目链接:https://leetcode.cn/problems/jump-game-ii/

文章讲解:https://www.programmercarl.com/0045.跳跃游戏II.html

视频讲解:https://www.bilibili.com/video/BV1Y24y1r7XZ

3.1 初见思路

  1. 基于Q55 的思路,需要思考的问题如下
  2. 什么时候跳跃次数加1?----当本次覆盖范围遍历完后,就知道这次要跳到哪里了
  3. 还需要变量记录本次能覆盖的范围,并且要在本次覆盖范围遍历完时更新

3.2 具体实现

java 复制代码
class Solution {
    public int jump(int[] nums) {
        int count = 0;
        
        int far=0;
        int cover=0;
        for(int i=0;i<=cover;i++){
            if(cover>=nums.length-1){
                return count;
            }
            far=Math.max(far,i+nums[i]);
            if(i==cover){
                cover=far;
                count++;
            }
        }
        return count;
    }
}

3.3 重难点

四、 1005.K次取反后最大化的数组和

题目链接:https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/

文章讲解:https://www.programmercarl.com/1005.K次取反后最大化的数组和.html

视频讲解:https://www.bilibili.com/video/BV138411G7LY

4.1 初见思路

  1. 把负数都变成正数,优先改变绝对值大的负数
  2. 如果所有负数都变成了正数,那就应该反复操作最小的正数。

4.2 具体实现

java 复制代码
class Solution {
    public int largestSumAfterKNegations(int[] nums, int k) {
        Arrays.sort(nums);
        int tempK = k;
        for(int i=0;i<nums.length && i<k;i++){
            if(nums[i]==0){
                break;
            }
            if(nums[i]<0){
                //从前向后遍历,遇到负数将其变为正数,同时K--
                nums[i]=-nums[i];
                tempK--;
            }
        }
        if(tempK>0){
            // 如果tempK还大于0,那么反复转变数值最小的元素,将tempK用完
            boolean flag = tempK%2==1?true:false;
            Arrays.sort(nums);
            if(flag){
                nums[0]=-nums[0];
            }
        }
        int sum=0;
        for(int i=0;i<nums.length;i++){
            sum+=nums[i];
        }
        return sum;
    }
}

4.3 重难点

相关推荐
爱学习的小鱼gogo1 小时前
python 矩阵中寻找就接近的目标值 (矩阵-中等)含源码(八)
开发语言·经验分享·python·算法·职场和发展·矩阵
红纸2811 小时前
Subword算法之WordPiece、Unigram与SentencePiece
人工智能·python·深度学习·神经网络·算法·机器学习·自然语言处理
CUMT_DJ2 小时前
从零复现论文(1)——通感一体化实现协作基站分配与资源分配(CBARA)策略
算法·通感一体化
tt5555555555552 小时前
CSDN 教程:C++ 经典字符串与栈算法题逐行详解
c++·算法·哈希算法
_dindong2 小时前
基础算法:滑动窗口
数据结构·学习·算法·leetcode·力扣
Voyager_43 小时前
图像处理踩坑:浮点数误差导致的缩放尺寸异常与解决办法
数据结构·图像处理·人工智能·python·算法
文艺倾年3 小时前
【八股消消乐】手撕分布式协议和算法(基础篇)
分布式·算法
万岳科技系统开发4 小时前
从源码优化外卖配送系统:算法调度、智能推荐与数据分析应用
算法·数据挖掘·数据分析
信奥卷王6 小时前
[GESP202503 五级] 原根判断
java·数据结构·算法
兮山与7 小时前
算法4.0
算法