Skip to content

Commit 10d87ef

Browse files
authored
Create shortest-distance-to-target-color.py
1 parent 70bad44 commit 10d87ef

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Time: O(n)
2+
# Space: O(n)
3+
4+
class Solution(object):
5+
def shortestDistanceColor(self, colors, queries):
6+
"""
7+
:type colors: List[int]
8+
:type queries: List[List[int]]
9+
:rtype: List[int]
10+
"""
11+
dp = [[float("inf") for _ in xrange(len(colors))] for _ in xrange(3)]
12+
dp[colors[0]-1][0] = 0
13+
for i in xrange(1, len(colors)):
14+
for color in xrange(3):
15+
dp[color][i] = dp[color][i-1]+1
16+
dp[colors[i]-1][i] = 0
17+
18+
dp[colors[len(colors)-1]-1][len(colors)-1] = 0
19+
for i in reversed(xrange(len(colors)-1)):
20+
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
24+
25+
return [abs(dp[color-1][i]) if abs(dp[color-1][i]) != float("inf") else -1 \
26+
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)