@@ -8,49 +8,22 @@ def shortestDistanceColor(self, colors, queries):
8
8
:type queries: List[List[int]]
9
9
:rtype: List[int]
10
10
"""
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 )]
12
12
dp [colors [0 ]- 1 ][0 ] = 0
13
13
for i in xrange (1 , len (colors )):
14
14
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
17
17
18
- dp [colors [len (colors )- 1 ]- 1 ][len (colors )- 1 ] = 0
18
+ dp [colors [len (colors )- 1 ]- 1 ][len (colors )- 1 ] = len ( colors ) - 1
19
19
for i in reversed (xrange (len (colors )- 1 )):
20
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
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
24
27
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 \
26
29
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