|
| 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