Find minimal property set in neighborhood
Company: Airbnb
Role: Software Engineer
Category: Coding & Algorithms
Difficulty: Medium
Interview Round: Technical Screen
Quick Answer: This question evaluates combinatorial optimization and algorithm design skills, focusing on capacity-constrained selection (subset-sum/knapsack-style reasoning), deterministic tie-breaking, and complexity analysis within the Coding & Algorithms domain.
Constraints
- 0 <= len(properties) <= 200
- Each property is a tuple (id, neighborhood, capacity)
- IDs are unique integers; duplicate capacities are allowed
- 1 <= capacity <= 1000
- 0 <= groupSize <= 20000
- The sum of capacities of properties in targetNeighborhood is at most 20000
Examples
Input: ([(1, "downtown", 5), (2, "downtown", 3), (3, "downtown", 1), (4, "uptown", 4), (5, "uptown", 2)], "downtown", 6)
Expected Output: [1, 3]
Explanation: No single downtown property reaches 6. Both [1, 2] and [1, 3] use 2 properties, but [1, 3] has smaller total capacity: 6 instead of 8.
Input: ([(1, "downtown", 5), (2, "downtown", 3), (3, "downtown", 1), (4, "uptown", 4), (5, "uptown", 2)], "downtown", 3)
Expected Output: [2]
Explanation: Property 2 alone reaches the target, so 1 property is optimal.
Input: ([(1, "downtown", 5), (2, "downtown", 3), (3, "downtown", 1), (4, "uptown", 4), (5, "uptown", 2)], "downtown", 10)
Expected Output: []
Explanation: The total downtown capacity is only 9, so reaching 10 is impossible.
Input: ([(10, "midtown", 6), (11, "midtown", 3), (12, "midtown", 2)], "midtown", 5)
Expected Output: [10]
Explanation: Using one property is better than using two, even though [11, 12] hits the target exactly.
Input: ([(5, "alpha", 4), (1, "alpha", 4), (3, "alpha", 4), (9, "beta", 10)], "alpha", 8)
Expected Output: [1, 3]
Explanation: Any 2 alpha properties reach 8. They all have the same count and total capacity, so choose the lexicographically smallest ID list.
Input: ([(1, "north", 4), (2, "north", 7)], "north", 0)
Expected Output: []
Explanation: A non-positive group size is already satisfied by the empty subset.
Input: ([(1, "north", 4), (2, "north", 7)], "south", 3)
Expected Output: []
Explanation: No property belongs to the target neighborhood.
Hints
- This is a 0/1 knapsack or subset-sum variant: exact sums matter because two solutions with the same number of properties can overshoot by different amounts.
- After you know the optimal count and exact total capacity, sort the matching properties by ID and reconstruct greedily to get the lexicographically smallest valid ID list.