3809. Best Reachable Tower
Description
You are given a 2D integer array towers, where towers[i] = [xi, yi, qi] represents the coordinates (xi, yi) and quality factor qi of the ith tower.
You are also given an integer array center = [cx, cyβββββββ] representing your location, and an integer radius.
A tower is reachable if its Manhattan distance from center is less than or equal to radius.
Among all reachable towers:
- Return the coordinates of the tower with the maximum quality factor.
- If there is a tie, return the tower with the lexicographically smallest coordinate. If no tower is reachable, return
[-1, -1].
The Manhattan Distance between two cells (xi, yi) and (xj, yj) is |xi - xj| + |yi - yj|.
A coordinate [xi, yi] is lexicographically smaller than [xj, yj] if xi < xj, or xi == xj and yi < yj.
|x| denotes the absolute value of x.
Example 1:
Input: towers = [[1,2,5], [2,1,7], [3,1,9]], center = [1,1], radius = 2
Output: [3,1]
Explanation:
- Tower
[1, 2, 5]: Manhattan distance =|1 - 1| + |2 - 1| = 1, reachable. - Tower
[2, 1, 7]: Manhattan distance =|2 - 1| + |1 - 1| = 1, reachable. - Tower
[3, 1, 9]: Manhattan distance =|3 - 1| + |1 - 1| = 2, reachable.
All towers are reachable. The maximum quality factor is 9, which corresponds to tower [3, 1].
Example 2:
Input: towers = [[1,3,4], [2,2,4], [4,4,7]], center = [0,0], radius = 5
Output: [1,3]
Explanation:
- Tower
[1, 3, 4]: Manhattan distance =|1 - 0| + |3 - 0| = 4, reachable. - Tower
[2, 2, 4]: Manhattan distance =|2 - 0| + |2 - 0| = 4, reachable. - Tower
[4, 4, 7]: Manhattan distance =|4 - 0| + |4 - 0| = 8, not reachable.
Among the reachable towers, the maximum quality factor is 4. Both [1, 3] and [2, 2] have the same quality, so the lexicographically smaller coordinate is [1, 3].
Example 3:
Input: towers = [[5,6,8], [0,3,5]], center = [1,2], radius = 1
Output: [-1,-1]
Explanation:
- Tower
[5, 6, 8]: Manhattan distance =|5 - 1| + |6 - 2| = 8, not reachable. - Tower
[0, 3, 5]: Manhattan distance =|0 - 1| + |3 - 2| = 2, not reachable.
No tower is reachable within the given radius, so [-1, -1] is returned.
Constraints:
1 <= towers.length <= 105towers[i] = [xi, yi, qi]center = [cx, cy]0 <= xi, yi, qi, cx, cy <= 105βββββββ0 <= radius <= 105
Solutions
Solution 1: One-Pass Traversal
We define a variable \(\textit{idx}\) to record the index of the current best tower, initially \(\textit{idx} = -1\). Then, we traverse each tower and calculate the Manhattan distance \(\textit{dist}\) between it and \(\textit{center}\):
If \(\textit{dist} > \textit{radius}\), the tower is unreachable, so we skip it. Otherwise, we compare the quality factor \(q\) of the current tower with that of the best tower:
- If \(\textit{idx} = -1\), it means no reachable tower has been found yet, so we update \(\textit{idx}\) to the current tower's index.
- If the current tower's quality factor \(q_i\) is greater than the best tower's quality factor \(q_{\textit{idx}}\), we update \(\textit{idx}\) to the current tower's index.
- If the current tower's quality factor \(q_i\) is equal to the best tower's quality factor \(q_{\textit{idx}}\), we compare the coordinates of the two towers and choose the one with the smaller lexicographical order.
After the traversal ends, if \(\textit{idx} = -1\), it means there are no reachable towers, so we return \([-1, -1]\). Otherwise, we return the coordinates of the best tower.
The time complexity is \(O(n)\), where \(n\) is the number of towers. The space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |