Identify members lacking specialty coverage
DoorDashSoftware Engineer · OnsiteLast updated
Identify members lacking specialty coverage evaluates algorithm design, data structures, correctness, complexity, edge cases, and implementation details in a realistic interview setting. A strong answer states assumptions, handles edge cases, explains trade-offs, and shows how to validate the result clearly.
Identify members lacking specialty coverage
Oscar wants to ensure that every insurance member has adequate access to in-network healthcare providers within a reasonable travel distance.
You are given:
- A list of providers, where each provider has:
id: an integer provider IDspecialty: a string (e.g.,"Cardiology","Dermatology")location: a 2D coordinate(x, y)representing the provider’s location- A list of members, where each member has:
id: an integer member IDlocation: a 2D coordinate(x, y)representing the member’s locationrequired_specialties: a list of strings indicating the specialties this member needs- A number
max_distance(float or integer), which is the maximum allowed travel distance.
Assume Euclidean distance between two points (x1, y1) and (x2, y2):
[ \text{distance} = \sqrt{(x1 - x2)^2 + (y1 - y2)^2} ]
A member has adequate coverage if, for every specialty in their required_specialties, there exists at least one provider with that specialty whose distance from the member is less than or equal to max_distance.
A member lacks adequate coverage if there is at least one required specialty for which no such provider exists within max_distance.
Task:
Write a function that, given providers, members, and max_distance, returns a list of the IDs of all members who lack adequate coverage.
You may return the member IDs in any order.
Example
providers = [
{"id": 1, "specialty": "Cardiology", "location": (1, 2)},
{"id": 2, "specialty": "Dermatology", "location": (3, 4)},
]
members = [
{"id": 101, "location": (2, 3), "required_specialties": ["Cardiology", "Dermatology"]},
{"id": 102, "location": (10, 10), "required_specialties": ["Cardiology"]},
]
max_distance = 5
Distances:
- Member 101 to provider 1 (Cardiology):
- distance = (\sqrt{(2-1)^2 + (3-2)^2} = \sqrt{2} \approx 1.41) ≤ 5
- Member 101 to provider 2 (Dermatology):
- distance = (\sqrt{(2-3)^2 + (3-4)^2} = \sqrt{2} \approx 1.41) ≤ 5
- Member 102 to provider 1 (Cardiology):
- distance = (\sqrt{(10-1)^2 + (10-2)^2} = \sqrt{145} \approx 12.04) > 5
So member 101 has adequate coverage for all required specialties, but member 102 does not.
Expected output:
[102]
Clarifying Questions to Ask
- Clarify input sizes, value ranges, mutability, return format, and tie-breaking.
- State the target time and space complexity before coding.
- Call out edge cases such as empty inputs, duplicates, invalid values, overflow, and boundary sizes.
Follow-up questions
- How would the approach change if the input were streaming or too large for memory?
- What invariants would you assert in production code?
- Which tests would catch off-by-one, duplicate, or tie-breaking bugs?
Solution walkthrough is for members
Get the full walkthrough with reference code and complexity analysis, plus Kitty Coach at 300 messages a day. Hints, the code runner and community answers stay free.