Katkat

Identify members lacking specialty coverage

DoorDashSoftware Engineer · Onsite

Last 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 ID
  • specialty: 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 ID
  • location: a 2D coordinate (x, y) representing the member’s location
  • required_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?