• 贪心——55. 跳跃游戏


    给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。

    数组中的每个元素代表你在该位置可以跳跃的最大长度。

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

    示例 1:

    输入:nums = [2,3,1,1,4]
    输出:true
    解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
    示例 2:

    输入:nums = [3,2,1,0,4]
    输出:false
    解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个

    当我还是一个小白时,我写的代码是这样,此时我还不会巧妙的借助现成的武器。当我长大后,我学会了利用手里的武器,隐藏共鸣,达到自己才能懂得境界。

    我是如何进阶的,尽可能省去多余的变量,利用现有的变量。我写代码的一个缺点,就是不会利用循环。

    class Solution {
        public boolean canJump(int[] nums) {
            if (nums.length == 0)
                return true;
            int start = 0;
            int end = 0;
            int maxjump = nums[0];
            int maxlen = nums.length-1;
            while (true) {
                start = end + 1;
                end = maxjump;
                if (end >= maxlen)
                    return true;
                if (start > maxlen)
                    return true;
                int tempmax = 0;
                for (int i = start; i <= end; i++) {
                    if ((i + nums[i]) > tempmax)
                        tempmax = i + nums[i];
                }
                maxjump = tempmax;
                if (maxjump == end)
                    return false;
            }
    
        }
    }

    大神循环去变量版本

    public class Solution {
        public boolean canJump(int[] nums) {
            int n = nums.length;
            int rightmost = 0;
            for (int i = 0; i < n; ++i) {
                if (i <= rightmost) {
                    rightmost = Math.max(rightmost, i + nums[i]);
                    if (rightmost >= n - 1) {
                        return true;
                    }
                }
            }
            return false;
        }
    }
  • 相关阅读:
    PHP类(一)-类的实例化
    PHP函数(六)-匿名函数(闭包函数)
    PHP函数(五)-回调函数
    javaIO-字符流
    split 命令
    hadoop的增删改查
    Hadoop的MR
    java的序列化和反序列化
    字符串格式化-String类format方法
    Avro从入门到入土
  • 原文地址:https://www.cnblogs.com/xiaoming521/p/15013352.html
Copyright © 2020-2023  润新知