面试经典150题——Day10

文章目录

    • 一、题目
    • 二、题解

一、题目

45. Jump Game II

You are given a 0-indexed array of integers nums of length n. You are initially positioned at nums[0].

Each element nums[i] represents the maximum length of a forward jump from index i. In other words, if you are at nums[i], you can jump to any nums[i + j] where:

0 <= j <= nums[i] and
i + j < n
Return the minimum number of jumps to reach nums[n - 1]. The test cases are generated such that you can reach nums[n - 1].

Example 1:

Input: nums = [2,3,1,1,4]
Output: 2
Explanation: The minimum number of jumps to reach the last index is 2. Jump 1 step from index 0 to 1, then 3 steps to the last index.
Example 2:

Input: nums = [2,3,0,1,4]
Output: 2

Constraints:

1 <= nums.length <= 104
0 <= nums[i] <= 1000
It’s guaranteed that you can reach nums[n - 1].

题目来源:leetcode

二、题解

我自己的笨解法

class Solution {
public:
    int N = 10010;
    int min(int a,int b){
        if(a < b) return a;
        else return b;
    }
    int jump(vector<int>& nums) {
        int n = nums.size();
        int dp[N];
        memset(dp,10010,sizeof dp);
        for(int i = 0;i < n;i++){
            if(i == 0) dp[0] = 0;
            for(int j = i + 1;j <= i + nums[i];j++){
                if(j == n - 1){
                    dp[j] = min(dp[j],dp[i] + 1);
                    return dp[n-1];
                }
                else{
                    dp[j] = min(dp[j],dp[i] + 1);
                }
            }
        }
        return dp[n-1];
    }
};

官方题解

class Solution {
public:
    int jump(vector<int>& nums) {
        int maxPos = 0, n = nums.size(), end = 0, step = 0;
        for (int i = 0; i < n - 1; ++i) {
            if (maxPos >= i) {
                maxPos = max(maxPos, i + nums[i]);
                if (i == end) {
                    end = maxPos;
                    ++step;
                }
            }
        }
        return step;
    }
};

你可能感兴趣的:(算法,数据结构,leetcode,c++,数组,贪心算法,动态规划)