Nearest Available Drone | LeetCode 4024 | Weekly Contest 515 | Java | Developer Coder
Nearest Available Drone - Video Solution
Watch 3 video solutions for Nearest Available Drone, a easy level problem. This walkthrough by Developer Coder has 82 views views. Want to try solving it yourself? Practice on FleetCode or read the detailed text solution.
Problem Statement
You are given a 2D integer array drones, where drones[i] = [xi, yi, rangei] represents the x-coordinate, y-coordinate, and travel range of the ith drone.
You are also given an integer array target = [tx, ty], representing the coordinates of the target.
A drone drones[i] can reach the target if the Manhattan distance between its coordinates and the target coordinates is less than or equal to its rangei.
Return the index of the reachable drone with the minimum Manhattan distance to the target. If there is a tie, return the smallest index. If no drone can reach the target, return -1.
Example 1:
Input: drones = [[0,0,8],[2,2,9]], target = [3,4]
Output: 1
Explanation:
- The distance between
drones[0]andtargetis|0 - 3| + |0 - 4| = 7, which is within its range of 8. - The distance between
drones[1]andtargetis|2 - 3| + |2 - 4| = 3, which is within its range of 9. - Since
drones[1]is the nearest drone, the answer is 1.
Example 2:
Input: drones = [[2,1,5],[4,4,5],[6,6,8]], target = [5,5]
Output: 1
Explanation:
- The distance between
drones[0]andtargetis|2 - 5| + |1 - 5| = 7, which is greater than its range of 5. - The distance between
drones[1]andtargetis|4 - 5| + |4 - 5| = 2, which is within its range of 5. - The distance between
drones[2]andtargetis|6 - 5| + |6 - 5| = 2, which is within its range of 8. - Both
drones[1]anddrones[2]are the nearest drones. Since we should return the smallest index, the answer is 1.
Example 3:
Input: drones = [[4,4,5]], target = [8,6]
Output: -1
Explanation:
- The distance between
drones[0]andtargetis|4 - 8| + |4 - 6| = 6, which is greater than its range of 5. - No drone can reach the target, so the answer is -1.
Constraints:
1 <= drones.length <= 100drones[i] = [xi, yi, rangei]target = [tx, ty]-25 <= xi, yi, tx, ty <= 251 <= rangei <= 100
Approach Overview
Problem Overview: You are given a set of drones with coordinates and a customer location. The task is to find the drone closest to the customer, i.e., the one with the minimum Euclidean distance. If multiple drones are equidistant, return the one with the smallest ID.
Approach 1: Brute Force (O(n) time, O(1) space)
Iterate through the list of drones, compute the squared distance to the customer for each, and keep track of the minimum distance and the corresponding drone ID. Use squared distance to avoid floating-point precision issues. This approach is straightforward and works perfectly for small inputs, but it doesn't scale well if the list is huge and you need repeated queries.
Approach 2: Sort by Distance (O(n log n) time, O(n) space)
Create an array of pairs (distance, ID) and sort it by distance, then by ID. The first element after sorting is the answer. This is useful if you need the k nearest drones or if the list is static and you want to precompute an ordering. However, it is overkill for a single query and uses extra memory.
Approach 3: Linear Scan with Tie-Breaking (O(n) time, O(1) space) - Optimal
The optimal solution is a single pass that tracks the best (minimum distance, smallest ID) pair. For each drone, compute the squared distance, and if it's less than the current minimum, update. If it's equal, update only if the ID is smaller. This avoids sorting and uses constant extra space. It's the most efficient for a single query and is what interviewers expect.
Recommended for interviews: The linear scan with tie-breaking is the expected solution. It shows you can optimize a simple problem and handle edge cases like ties. Brute force is acceptable as a starting point, but you should quickly move to the O(n) approach. The problem is tagged General, so it tests basic iteration and comparison logic.
Complexity Analysis
| Approach | Time | Space | When to Use |
|---|---|---|---|
| Brute Force | O(n) | O(1) | Small input or when you need a quick solution |
| Sort by Distance | O(n log n) | O(n) | When you need k nearest or precomputed order |
| Linear Scan with Tie-Breaking | O(n) | O(1) | General case, single query, memory constrained |