Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public boolean canReach(int[] arr, int start) {
- int n = arr.length;
- boolean visited[] = new boolean[n];
- Queue<Integer> queue = new LinkedList<>();
- queue.offer(start);
- while (!queue.isEmpty()) {
- int current = queue.poll();
- if (arr[current] == 0) {
- return true;
- }
- int left = current - arr[current];
- int right = current + arr[current];
- if (left >= 0 && !visited[left]) {
- visited[left] = true;
- queue.offer(left);
- }
- if (right < n && !visited[right]) {
- visited[right] = true;
- queue.offer(right);
- }
- }
- return false;
- }
- }
- /*
- arr = [4,2,3,0,3,1,2], start = 5
- queue.offer(5)
- {
- current = 5
- arr[5] -> 1
- left = 5 - 1 = 4
- right = 5 + 1 = 6
- visited[4] = true
- queue.offer(4)
- visited[6] = true
- queue.offer(6)
- // queue = [4, 6]
- // visited = [0, 0, 0, 0, 1, 1, 1]
- }
- {
- current = 4
- arr[4] -> 3
- left = 4 - 3 = 1
- right = 4 + 3 = 7
- visited[1] = true
- queue.offer(1)
- // queue = [6, 1]
- // visited = [0, 1, 0, 0, 1, 1, 1]
- }
- {
- current = 6
- arr[6] -> 2
- left = 6 - 2 = 4
- right = 6 + 2 = 8
- // queue = [1]
- // visited = [0, 1, 0, 0, 1, 1, 1]
- }
- {
- current = 1
- arr[1] -> 2
- left = 1 - 2 = -1
- right = 1 + 2 = 3
- visited[3] = true
- queue.offer(3)
- // queue = [3]
- // visited = [0, 1, 0, 1, 1, 1, 1]
- }
- {
- current = 3
- arr[1] -> 0
- return true
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement