LeetCode //C - 1306. Jump Game III

1306. Jump Game III

Given an array of non-negative integers arr, you are initially positioned at start index of the array. When you are at index i, you can jump to i + arri or i - arri, check if you can reach any index with value 0.

Notice that you can not jump outside of the array at any time.

Example 1:

Input: arr = 4,2,3,0,3,1,2, start = 5

Output: true

Explanation:

All possible ways to reach at index 3 with value 0 are:

index 5 -> index 4 -> index 1 -> index 3

index 5 -> index 6 -> index 4 -> index 1 -> index 3 .

Example 2:

Input: arr = 4,2,3,0,3,1,2, start = 0

Output: true

**Explanation: **

One possible way to reach at index 3 with value 0 is:

index 0 -> index 4 -> index 1 -> index 3

Example 3:

Input: arr = 3,0,2,1,2, start = 2

Output: false

Explanation: There is no way to reach at index 1 with value 0.

Constraints:
  • 1 < = a r r . l e n g t h < = 5 ∗ 10 4 1 <= arr.length <= 5 * 10^4 1<=arr.length<=5∗104
  • 0 <= arri < arr.length
  • 0 <= start < arr.length

From: LeetCode

Link: 1306. Jump Game III


Solution:

Use BFS from start, visiting each reachable index once until finding a value 0.

Code:
c 复制代码
bool canReach(int* arr, int arrSize, int start) {
    bool* visited = (bool*)calloc(arrSize, sizeof(bool));
    int* queue = (int*)malloc(arrSize * sizeof(int));

    int front = 0;
    int rear = 0;

    queue[rear++] = start;
    visited[start] = true;

    while (front < rear) {
        int index = queue[front++];

        if (arr[index] == 0) {
            free(visited);
            free(queue);
            return true;
        }

        int right = index + arr[index];
        int left = index - arr[index];

        if (right < arrSize && !visited[right]) {
            visited[right] = true;
            queue[rear++] = right;
        }

        if (left >= 0 && !visited[left]) {
            visited[left] = true;
            queue[rear++] = left;
        }
    }

    free(visited);
    free(queue);
    return false;
}
相关推荐
小O的算法实验室1 小时前
IEEE TASE,面向无人机的不确定性感知信息路径规划:可解释贝叶斯强化学习方法
算法
L0208241 小时前
Kubernetes Service 与 kube‑proxy 深度详解
运维·算法·云原生·容器·贪心算法·kubernetes
傅科摆 _ py1 小时前
回溯力扣复习
算法·leetcode·职场和发展
wdfk_prog1 小时前
LWIP教程 40:从 `socket()` 到 `lwip_socket()`——DFS fd、SAL Socket 与 lwIP Backend
算法·深度优先
中伟视界1 小时前
边缘端行为识别部署实战:AI算法分析盒子落地皮带场景
人工智能·算法
落樱弥城2 小时前
FlashAttention 完全解析:从 Roofline 诊断到 CUDA 实现
人工智能·算法
FelixZhang0282 小时前
不懂金融或不会编程,如何开始量化?从策略搭建到回测验证
人工智能·python·算法·数学建模·均值算法·自然语言处理·金融