美文网首页
1306. 跳跃游戏 III

1306. 跳跃游戏 III

作者: 桐桑入梦 | 来源:发表于2020-01-07 21:47 被阅读0次

这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。
请你判断自己是否能够跳到对应元素值为 0 的 任意 下标处。
注意,不管是什么情况下,你都无法跳到数组之外。

示例 1:

输入:arr = [4,2,3,0,3,1,2], start = 5
输出:true
解释:
到达值为 0 的下标 3 有以下可能方案:
下标 5 -> 下标 4 -> 下标 1 -> 下标 3
下标 5 -> 下标 6 -> 下标 4 -> 下标 1 -> 下标 3
示例 2:

输入:arr = [4,2,3,0,3,1,2], start = 0
输出:true
解释:
到达值为 0 的下标 3 有以下可能方案:
下标 0 -> 下标 4 -> 下标 1 -> 下标 3
示例 3:

输入:arr = [3,0,2,1,2], start = 2
输出:false
解释:无法到达值为 0 的下标 1 处。

提示:
1 <= arr.length <= 5 * 10^4
0 <= arr[i] < arr.length
0 <= start < arr.length

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/jump-game-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

/*
1.判断数组中是否有0元素,如果没有,直接返回false(处理特殊情况)
2.使用vis表示可以走到的位置,vis[start]=true;
使用while,每次从所有走过的位置向两边走,如果新的位置没有访问,那么访问这个位置。
3.如果一轮while循环之后没有新的位置被访问到,那么说明不能继续访问新的位置
4.判断是否0所在位置可以被访问到
*/
class Solution {
public:
    bool canReach(vector<int>& arr, int start) {
        int len=arr.size();
        bool have0=false;
        vector<bool>vis;
        for(int i=0;i<len;i++){
            if(arr[i]==0) have0=true;
            vis.push_back(false);
        }

        if(have0==false) return false;

        int change=true;
        vis[start]=true;

        while(change){
            change = false;
            for(int i=0;i<len;i++){
                if(vis[i]==true){
                    int a=i+arr[i],b=i-arr[i];
                    if(a<len && vis[a]==false){
                        vis[a]=true;
                        change=true;
                    }
                    if(b>=0 && vis[b]==false){
                        vis[b]=true;
                        change=true;
                    } 

                }
            }
        }
        for(int i=0;i<len;i++){
            if(arr[i]==0 && vis[i]==true) return true;
        } 
        return false;
    }
};

相关文章

  • 1306. 跳跃游戏 III

    这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 ...

  • LeetCode-python 1306. 跳跃游戏 III

    题目链接[https://leetcode.cn/problems/jump-game-iii]难度:中等 ...

  • LeetCode #1306 Jump Game III 跳跃游

    1306 Jump Game III 跳跃游戏 III Description: Given an array o...

  • Leetcode 1306. Jump Game III

    文章作者:Tyan博客:noahsnail.com[http://noahsnail.com] | CSDN[ht...

  • 跳跃游戏

    可以正向扫描数组,记录当前位置可以到达最远的位置,a、游标要小于可以到达最远的位置,否则return false。...

  • 跳跃游戏

    【链接】https://nanti.jisuanke.com/t/18【题目】给定一个非负整数数组,假定你的初始位...

  • 跳跃游戏

    LintCode题目地址给出一个非负整数数组,你最初定位在数组的第一个位置。数组中的每个元素代表你在那个位置可以跳...

  • 跳跃游戏

    给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否...

  • 跳跃游戏

    给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。 判断你...

  • 跳跃游戏

    在跳跃游戏中,要明白贪心法则的定义。贪心法则:最基本的理解就是,每次选择当前最优的解,到最后就能得到整个问题的最优...

网友评论

      本文标题:1306. 跳跃游戏 III

      本文链接:https://www.haomeiwen.com/subject/mgidactx.html