Skip to content

Commit ce6835c

Browse files
authored
Update shortest-distance-to-target-color.py
1 parent 10d87ef commit ce6835c

File tree

1 file changed

+11
-38
lines changed

1 file changed

+11
-38
lines changed

Python/shortest-distance-to-target-color.py

Lines changed: 11 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -8,49 +8,22 @@ def shortestDistanceColor(self, colors, queries):
88
:type queries: List[List[int]]
99
:rtype: List[int]
1010
"""
11-
dp = [[float("inf") for _ in xrange(len(colors))] for _ in xrange(3)]
11+
dp = [[-1 for _ in xrange(len(colors))] for _ in xrange(3)]
1212
dp[colors[0]-1][0] = 0
1313
for i in xrange(1, len(colors)):
1414
for color in xrange(3):
15-
dp[color][i] = dp[color][i-1]+1
16-
dp[colors[i]-1][i] = 0
15+
dp[color][i] = dp[color][i-1]
16+
dp[colors[i]-1][i] = i
1717

18-
dp[colors[len(colors)-1]-1][len(colors)-1] = 0
18+
dp[colors[len(colors)-1]-1][len(colors)-1] = len(colors)-1
1919
for i in reversed(xrange(len(colors)-1)):
2020
for color in xrange(3):
21-
if abs(dp[color][i+1]-1) < dp[color][i]:
22-
dp[color][i] = dp[color][i+1]-1
23-
dp[colors[i]-1][i] = 0
21+
if dp[color][i+1] == -1:
22+
continue
23+
if dp[color][i] == -1 or \
24+
abs(dp[color][i+1]-i) < abs(dp[color][i]-i):
25+
dp[color][i] = dp[color][i+1]
26+
dp[colors[i]-1][i] = i
2427

25-
return [abs(dp[color-1][i]) if abs(dp[color-1][i]) != float("inf") else -1 \
28+
return [abs(dp[color-1][i]-i) if dp[color-1][i] != -1 else -1 \
2629
for i, color in queries]
27-
28-
# Time: O(n)
29-
# Space: O(n)
30-
class Solution2(object):
31-
def shortestDistanceColor(self, colors, queries):
32-
"""
33-
:type colors: List[int]
34-
:type queries: List[List[int]]
35-
:rtype: List[int]
36-
"""
37-
38-
left = [[float("inf") for _ in xrange(len(colors))] for _ in xrange(3)]
39-
left[colors[0]-1][0] = 0
40-
for i in xrange(1, len(colors)):
41-
for color in xrange(3):
42-
left[color][i] = left[color][i-1]+1
43-
left[colors[i]-1][i] = 0
44-
45-
right = [[float("inf") for _ in xrange(len(colors))] for _ in xrange(3)]
46-
right[colors[len(colors)-1]-1][len(colors)-1] = 0
47-
for i in reversed(xrange(len(colors)-1)):
48-
for color in xrange(3):
49-
right[color][i] = right[color][i+1]+1
50-
right[colors[i]-1][i] = 0
51-
52-
return [min(left[color-1][i], right[color-1][i]) \
53-
if min(left[color-1][i], right[color-1][i]) != float("inf") \
54-
else -1 \
55-
for i, color in queries]
56-

0 commit comments

Comments
 (0)