LC: 1182. Shortest Distance to Target Color
https://leetcode.com/problems/shortest-distance-to-target-color/
1182. Shortest Distance to Target Color
You are given an array colors, in which there are three colors: 1, 2 and 3.
You are also given some queries. Each query consists of two integers i and c, return the shortest distance between the given index i and the target color c. If there is no solution return -1.
Example 1:
Input: colors = [1,1,2,1,3,2,2,3,3], queries = [[1,3],[2,2],[6,1]]
Output: [3,0,3]
Explanation:
The nearest 3 from index 1 is at index 4 (3 steps away).
The nearest 2 from index 2 is at index 2 itself (0 steps away).
The nearest 1 from index 6 is at index 3 (3 steps away).Example 2:
Input: colors = [1,2], queries = [[0,3]]
Output: [-1]
Explanation: There is no 3 in the array.Constraints:
1 <= colors.length <= 5*10^41 <= colors[i] <= 31 <= queries.length <= 5*10^4queries[i].length == 20 <= queries[i][0] < colors.length1 <= queries[i][1] <= 3
Shortest Distance to Target Color
The Essence:
Alle Indizes der Farbe sind zu der Funktion bei dem Abruf gegeben. Man kann damit die Indizes nach Farbe aufbereiten. Eine solche Vorverarbeiten kann dafür verwendet, die Liste der Indizes sortiert zu speichern oder in eine direkte Tabelle umzuwandeln.
Details:
Man kann den gesuchten Index durch binäre Suche der Indizes einer Farbe bestimmen.
Außerdem kann man eine direktere Abbildung der nächsten Indizes erstellen. Man kann bemerken, dass der nächste Index entweder der nächste Index nach links oder nach rechts. Man kann also das Array zuerst in der normalen Reihenfolge und dann in der Umgekehrten durchlaufen. Mit diesem Verfahren kann man die nächsten linken und rechten Indizes von einer Farbe vergleichen.
Solution(s):
The code to both approaches can be found:
Default Code:
Last updated