力扣55.跳跃游戏Ⅱ

 题目

        跳跃游戏
        一个数组存储了非负整形数据,数组中的第i个元素nums[i],代表了可以从数组第i个位置最多向前跳跃nums[i]步,
        已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置?
        例如:nums=[2,3,1,1,4],可以从nums[0]=2跳跃至nums[4]=4
        nums = [3,2,1,0,4],不可以从nums[0]=3跳跃至nums[4]=4

求解

思想

        让每一个都跳到最远的位置,下图中arr[5]黑体是数组内原始数据,红体是每个数值可以到达的最远下标位置,用arr[]数组标记,arr[i]:i能到达的最远距离。i从0开始计数。

力扣55.跳跃游戏Ⅱ_第1张图片

  • max用来标记最远能到达的位置,初始化max=arr[0]
  • j用来循环,遍历数组的数据,初始化j=0
  • 因为在每个位置的max都不一样,每走一次,如果当前能走的最远距离>max,更新一次max
  • 最终的的j(用j来循环)

超出前面能够到的的最远距离,就说明它不能走在那,代码实现即:while(j<5&&j<=max)

代码实现

#include
using namespace std;

void main()
{
    int num[] = { 3,2,1,0,4 };//num存放测试用例
    //int num[] = { 2,3,1,1,4 };
    int arr[5];//存放最远能够达到的juli
    int i;
    for (i = 0; i < 5; i++)
        arr[i] = i + num[i];
    int max = arr[0]; //能到达的最远距离
    int j = 0;
    while (j < 5 && j <= max)//思考j<=max的用法★
    {
        if (max < arr[j])
            max = arr[j];
        j++;
    }
    if (j == 5)
        cout << "yes" << endl;
    else
        cout << "no" << endl;
}

运行结果


力扣

代码

class Solution {
public:
    bool canJump(vector& nums) {
        int max;
        //int len=nums.size()-1;
        //int arr[len]={0};
        vectorarr=nums;
        int i;
        for(i=0;i=arr[arr.size()-1];
        //return j==arr.size()-1;
    }
};

运行结果

力扣55.跳跃游戏Ⅱ_第2张图片

 

你可能感兴趣的:(算法,习题,C++,算法,leetcode,c++)