• 每日一题-贪心算法


    目录

    跳跃游戏

    跳跃游戏Ⅱ


    跳跃游戏

    • 时间:0802
    • 题目

    给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

    判断你是否能够到达最后一个下标。

    • 思路
      • 只要能够抵达当前的位置,就更新能抵达的最远值,因为题目是判断是否能够到达最后一个下标,每个能到达的下标位置都跳到最远能够抵达的下标,实时更新reach,reach就会有两种结束的情况:
        • 第一种:reach也就是当前能够跳到的最大值,都达不到i的话,证明怎么跳都跳不到终点
        • 第二种:reach >= n-1,证明能够到达最后一个下标的位置,因为能够抵达最远的地方已经超过了终点
    • 代码
    1. class Solution {
    2. public boolean canJump(int[] nums) {
    3. // 贪心算法 夸夸就是跳
    4. if(nums == null || nums.length == 0)
    5. return false;
    6. int reach = 0;
    7. int n = nums.length;
    8. for(int i = 0; i < nums.length; i ++){
    9. if(reach < i || reach >= n - 1)
    10. break;
    11. reach = Math.max(reach, i + nums[i]);
    12. }
    13. return reach >= n - 1;
    14. }
    15. }

    跳跃游戏Ⅱ

    • 时间:0803
    • 题目

    给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。

    假设你总是可以到达数组的最后一个位置。

    • 思路
      • 和上面的想法一致,以最少的步数到达终点,自然是每一步跨越的都是当前能够抵达的最远位置
      • 当前跳到的位置小于遍历数组的下标,就说明该跳了;跳的目的地下标就是当前能够到达最远位置的下标
      • 当前能够抵达最远位置的下标肯定超过当前的下标,否则肯定就跳不到终点了呀
    • 代码
    1. class Solution {
    2. public int jump(int[] nums) {
    3. if(nums == null || nums.length == 0)
    4. return 0;
    5. int jump = 0;
    6. int next = 0, cur = 0;
    7. for(int i = 0; i < nums.length; i ++){
    8. //当前抵达的点小于下标,就要跳了
    9. if(cur < i){
    10. jump ++;
    11. cur = next; //cur更新为当前能跳到的最大值 多跳一次
    12. }
    13. //next当前能跳到的最大值
    14. next = Math.max(next, i + nums[i]);
    15. }
    16. return jump;
    17. }
    18. }

  • 相关阅读:
    ENVI IDL:MODIS SWATH产品的点位-像元提取(另附Python代码)
    GUI编程--PyQt5--QAbstractButton
    tomcat7以上,设置maxPostSize=“0“参数后台获取不到的问题
    案例解读华为隐私计算产品TICS如何实现城市跨部门数据隐私计算
    PY32F003F18点灯
    YOLOv5-6.1源码详解之损失函数loss.py
    搞透 IOC,Spring IOC 看这篇就够了!
    C++编译链接详解
    django ajax jquery csrf_exempt 设置favicon.ico
    APP自动化测试-8.移动端混合应用自动化测试
  • 原文地址:https://blog.csdn.net/Katherine_Andy/article/details/126130984