LeetCode第55题 - 跳跃游戏

题目

解答一

java 复制代码
class Solution {   
    public boolean canJump(int[] nums) {
        if (nums == null || nums.length == 0) {
            return false;
        }
        if (nums[0] == 0 && nums.length == 1) {
            return true;
        }
        return canJump(nums, 0);
    }

    public boolean canJump(int[] nums, int index) {
        if (index > nums.length - 1) {
            return false;
        }
        if (nums[index] == 0) {
            return false;
        }

        if (nums[index] + index >= nums.length - 1) {
            return true;
        }

        // for (int i = 1; i <= nums[index]; ++i) {
        for (int i = nums[index]; i > 0; --i) {
            if (canJump(nums, index + i)) {
                return true;
            }
        }

        return false;
    }
}

解答二

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

        return false;
    }
}

总结

解答一使用递归,可以解决问题,但当输入规模增大时,可能出现递归过多、栈溢出的现象,同时效率也不满足要求。

解决二使用贪心算法,简单、直接、暴力、有效。变量max的使用,值得深入理解。

相关推荐
共享家952719 小时前
数独系列算法
算法·深度优先
程序员三藏19 小时前
Postman持久化保存/设置断言详解
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
liebe1*120 小时前
C语言程序代码(四)
c语言·数据结构·算法
进击的圆儿20 小时前
递归专题4 - 网格DFS与回溯
数据结构·算法·递归回溯
程序猿202320 小时前
Python每日一练---第一天:买卖股票的最佳时机
算法
夏鹏今天学习了吗21 小时前
【LeetCode热题100(56/100)】组合总和
算法·leetcode·职场和发展
ZPC821021 小时前
opencv 获取图像中物体的坐标值
人工智能·python·算法·机器人
颇有几分姿色21 小时前
密码学算法分类指南
算法·密码学
测试19981 天前
如何写出一个完整的测试用例?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
绝无仅有1 天前
某游戏大厂的 Redis 面试必问题解析
后端·算法·面试