• 海智算法训练营第三十一天 | 第八章 贪心算法 part02 | ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II


    今日任务:

    1.利用贪心解决每天利润问题

    2.利用贪心覆盖范围解决跳跃问题

    3.利用贪心覆盖范围解决跳跃II问题

    1.利用贪心解决每天利润问题

    力扣题目链接

    这道题可以用贪心很简单的做出来,从图中可以发现,其实我们需要收集每天的正利润就可以,收集正利润的区间,就是股票买卖的区间,而我们只需要关注最终利润,不需要记录区间

    1. class Solution {
    2. public int maxProfit(int[] prices) {
    3. int sum = 0;
    4. for (int i = 1; i < prices.length; i++) {
    5. sum += prices[i] - prices[i-1] > 0 ? prices[i] - prices[i-1] : 0;
    6. }
    7. return sum;
    8. }
    9. }

    所以代码实现起来也非常的简单

    2.利用贪心覆盖范围解决跳跃问题

    力扣题目链接

    贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。不一定非要明确一次究竟跳几步,每次取最大的跳跃步数,这个就是可以跳跃的覆盖范围。

    1. class Solution {
    2. public boolean canJump(int[] nums) {
    3. if(nums.length == 1) return true;
    4. int cover = 0;
    5. for (int i = 0; i <= cover; i++) {
    6. if(cover >= nums.length - 1) return true;
    7. cover = Math.max(i + nums[i] , cover);
    8. }
    9. return false;
    10. }
    11. }

    3.利用贪心覆盖范围解决跳跃II问题

    力扣题目链接

    这道跳跃II的问题和跳跃I的问题区别就在于前者是寻找最短的跳跃次数,而解题的关键就在于每次跳跃的区间内去寻找下一个跳跃的最大区间,直到到达终点,代码的实现呢需要有两个指针,cur指针用来指向当前的跳跃前的位置,next指针用来计算下次跳跃的最大距离(区间内跳的最远的距离)。

    1. class Solution {
    2. public int jump(int[] nums) {
    3. int cur = 0 , next = 0 , res = 0;
    4. for (int i = 0; i < nums.length; i++) {
    5. next = Math.max(next , nums[i] + i);
    6. if(i == cur){
    7. if(i < nums.length-1){
    8. res++;
    9. cur = next;
    10. if(cur >= nums.length-1) break;
    11. }else break;
    12. }
    13. }
    14. return res;
    15. }
    16. }

    学习时长:2h

    总结:这次学习接触了较简单的贪心算法题,对贪心算法有了初步的理解。

  • 相关阅读:
    架构师日记-如何写的一手好代码
    Springboot写电商系统(2)
    跨域问题WebMvcConfigurer
    【2024最新】4000字搞懂sora!一张脑图贯穿!
    Linux(1):开始
    Django后端开发——mysql数据库连接遇到的问题及解决
    新际遇?不看必后悔,成都市人民政府培育大企业大集团的实施意见
    1972:【15NOIP普及组】推销员
    JavaEE-多线程-Volatile关键字
    LeetCode:718. 最长重复子数组 - Python
  • 原文地址:https://blog.csdn.net/qq_74462324/article/details/136306141