Leetcode.1306 跳跃游戏 III

news/2024/7/5 2:07:26

题目链接

这里是引用

Leetcode.1306 跳跃游戏 III Rating : 1397

题目描述

这里有一个非负整数数组 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 < = a r r . l e n g t h < = 5 ∗ 1 0 4 1 <= arr.length <= 5 * 10^4 1<=arr.length<=5104
  • 0 < = a r r [ i ] < a r r . l e n g t h 0 <= arr[i] < arr.length 0<=arr[i]<arr.length
  • 0 < = s t a r t < a r r . l e n g t h 0 <= start < arr.length 0<=start<arr.length

解法:bfs

直接从起点 s t a r t start start 开始 bfs,能否跳到一个值为 0 的点。如果可以,就返回 true;否则就返回 false

时间复杂度: O ( n ) O(n) O(n)

C++代码:

class Solution {
    static constexpr int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
public:
    bool canReach(vector<int>& arr, int start) {
        int n = arr.size();
        vector<bool> st(n);

        queue<int> q;
        q.push(start);
        //记录该点是否被访问过
        st[start] = true;

        while(!q.empty()){
            auto t = q.front();
            q.pop();
            //如果直接跳到值为 0 的点,返回 true
            if(arr[t] == 0) return true;

            int d = arr[t];
            if(t + d < n && !st[t + d]){
                st[t + d] = true;
                q.push(t + d);
            }
            if(t - d >= 0 && !st[t - d]){
                st[t - d] = true;
                q.push(t - d);
            }
        }
        return false;
    }
};


http://lihuaxi.xjx100.cn/news/1021402.html

相关文章

Windows Subsystem for Android (WSA) 下载:在 Windows 11 上运行 Android 应用 (April 2023)

适用于 Android™️ 的 Windows 子系统&#xff0c;2023 年 4 月更新 (April 2023) 请访问原文链接&#xff1a;https://sysin.cn/blog/wsa/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Windows 11 上适用于 Android™ 的 …

【算法系列之二叉树I】leetcode226.翻转二叉树

非递归实现前序遍历 力扣题目链接 解决思路 前序遍历&#xff0c;中左右。先放右节点&#xff0c;后放左节点。 Java实现 class Solution {public List<Integer> preorderTraversal(TreeNode root) {//中左右Stack<TreeNode> stack new Stack<>();List…

【大数据之Hadoop】十三、MapReduce之WritableComparable排序

MapReduce框架必须进行排序&#xff0c;MapTask和ReduceTask都会对key按字典顺序排序&#xff0c;是默认的行为&#xff08;默认使用快速排序&#xff09;&#xff0c;有利于提高效率。任何程序数据都会进行排序&#xff0c;不管逻辑是否需要。 对于排序而言分为两个阶段&#…

响应式UI部件DevExtreme v22.2.5全新发布

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序。从Angular和Reac&#xff0c…

说走就走的旅行?你需要一个旅行必备清单

可能很多朋友都不用清单这个东西&#xff0c;更别说清单模版了。那清单真的好用吗&#xff1f;说实话&#xff0c;当你真的用清单来整理自己的日常工作&#xff0c;乃至生活琐事后&#xff0c;你就会发现你的时间多了&#xff0c;想要完成的事&#xff0c;大部分都可以按时完成…

MZ深度解读SAP常见财务问题-02-账套在哪里?

发文词&#xff1a;类似于新刊物的“发刊词”&#xff0c;我们也写两句发文词。笔者前些年关于SAP的文字主要包括“SAP那些事”系列文章中了&#xff0c;这些文章的视角主要是从顾问的角度进行描述的&#xff0c;侧重的也是系统功能和顾问职业的描述。 最近&#xff0c;笔者认…

【网络应用开发】实验3——Web组件重用与JavaBeans

目录 Web组件重用与JavaBeans预习报告 一、实验目的 二、实验原理 三、实验预习内容 1. 静态include指令何时执行&#xff1f;主页面和被包含的子页面是否转换为一个转换单元&#xff1f; 2.动作指令何时执行&#xff1f;主页面和被包含的子页面是否转换为一个转换单元&a…

PyTorch 之 基于经典网络架构训练图像分类模型

文章目录一、 模块简单介绍1. 数据预处理部分2. 网络模块设置3. 网络模型保存与测试二、数据读取与预处理操作1. 制作数据源2. 读取标签对应的实际名字3. 展示数据三、模型构建与实现1. 加载 models 中提供的模型&#xff0c;并且直接用训练的好权重当做初始化参数2. 参考 pyto…