小小程序媛  
得之坦然,失之淡然,顺其自然,争其必然

题目

Given an array of non-negative integers, you are initially positioned at the first index of the array.

Each element in the array represents your maximum jump length at that position.

Determine if you are able to reach the last index.

For example:
A = [2,3,1,1,4], return true.

A = [3,2,1,0,4], return false.

分析

该题目考察的贪心算法的应用。从第一步开始计算可以前进的最大步长,每走一步比较更新该值,始终保持当前位置的时候可前进步长最大。到达最终位置前,若出现步长<= 0的情况,说明失败。

AC代码

#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>

using namespace std;

//贪心算法
class Solution {
public:
    bool canJump(vector<int>& nums) {
        if (nums.empty())
            return false;

        int maxStep = nums[0];
        int len = nums.size();

        for (int i = 1; i < len; ++i)
        {
            if (maxStep <= 0)
                return false;
            else{
                maxStep = max(--maxStep, nums[i]);
            }//else
        }//for

        return true;
    }
};

GitHub测试程序源码

posted on 2015-09-12 20:01  Coding菌  阅读(150)  评论(0编辑  收藏  举报