-
-
Notifications
You must be signed in to change notification settings - Fork 297
/
Copy path1306.py
38 lines (38 loc) · 1.64 KB
/
1306.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
__________________________________________________________________________________________________
sample 216 ms submission
class Solution:
def canReach(self, arr: List[int], start: int) -> bool:
q = [start]
visited = [False] * len(arr)
visited[start] = True
while q:
curIndex = q.pop(0)
if arr[curIndex] == 0:
return True
visited[curIndex] = True
for nextIndex in [curIndex+arr[curIndex], curIndex-arr[curIndex]]:
if nextIndex < 0 or nextIndex >= len(arr) or visited[nextIndex]:
continue
q.append(nextIndex)
return False
__________________________________________________________________________________________________
sample 220 ms submission
class Solution:
def canReach(self, arr: List[int], start: int) -> bool:
# BFS
queue = collections.deque()
queue.append(start)
seen = set()
seen.add(start)
while queue:
cur_index = queue.popleft()
if arr[cur_index] == 0:
return True
if 0 <= cur_index + arr[cur_index] < len(arr) and cur_index + arr[cur_index] not in seen:
queue.append(cur_index + arr[cur_index])
seen.add(cur_index + arr[cur_index])
if 0 <= cur_index - arr[cur_index] < len(arr) and cur_index - arr[cur_index] not in seen:
queue.append(cur_index - arr[cur_index])
seen.add(cur_index - arr[cur_index])
return False
__________________________________________________________________________________________________