Leetcode 45 跳跃游戏 贪心

题目描述:

 

 

 题解:一开始的时候想到用的是dp,但是dp的复杂为O(n^2),超时了。仔细想想发现是一道贪心的题目,贪心地选择可达距离最大的位置作为每次跳跃的落点。具体描述见代码:

 

AC代码:

   int jump(vector<int>& nums) {
        int Len = nums.size();
        int ans = 0;
        
        if(Len == 1) return 0;

        for(int i=0;i<Len;)
        {
            int e = i + nums[i];
            int mx = -1;
            
            if(e >= Len-1)
            {
                ans++;
                return ans;
            }
            int pos;
            
            for(int j=i+1;j<=e;j++) 
            {
            // 选择下次跳远能跳最远的位置
                if(mx < j+nums[j])
                {
                    mx = j+nums[j];
                    pos = j;
                }
            }
            i = pos;
            ans++;
        }

        return ans;
    }    

 

posted @ 2020-01-06 20:04  猪突猛进!!!  阅读(154)  评论(0编辑  收藏  举报