Watch 10 video solutions for Number of Flowers in Full Bloom, a hard level problem involving Array, Hash Table, Binary Search. This walkthrough by NeetCodeIO has 15,656 views views. Want to try solving it yourself? Practice on FleetCode or read the detailed text solution.
You are given a 0-indexed 2D integer array flowers, where flowers[i] = [starti, endi] means the ith flower will be in full bloom from starti to endi (inclusive). You are also given a 0-indexed integer array people of size n, where people[i] is the time that the ith person will arrive to see the flowers.
Return an integer array answer of size n, where answer[i] is the number of flowers that are in full bloom when the ith person arrives.
Example 1:
Input: flowers = [[1,6],[3,7],[9,12],[4,13]], people = [2,3,7,11] Output: [1,2,2,2] Explanation: The figure above shows the times when the flowers are in full bloom and when the people arrive. For each person, we return the number of flowers in full bloom during their arrival.
Example 2:
Input: flowers = [[1,10],[3,3]], people = [3,3,2] Output: [2,2,1] Explanation: The figure above shows the times when the flowers are in full bloom and when the people arrive. For each person, we return the number of flowers in full bloom during their arrival.
Constraints:
1 <= flowers.length <= 5 * 104flowers[i].length == 21 <= starti <= endi <= 1091 <= people.length <= 5 * 1041 <= people[i] <= 109Problem Overview: You are given flower bloom intervals where flowers[i] = [start, end]. Each person arrives at a specific time, and you must return how many flowers are blooming at that exact moment. A flower counts as blooming if start ≤ time ≤ end. The challenge is answering many queries efficiently without scanning every interval each time.
Approach 1: Binary Search on Start and End Times (O((n + q) log n) time, O(n) space)
Separate the start times and end times into two arrays and sort them. For a person arriving at time t, use binary search to count how many flowers have started blooming (start ≤ t) and how many have already finished (end < t). The number of active flowers equals started - ended. Each query runs in O(log n), making this efficient even with thousands of people. This approach works well because the bloom condition depends only on relative ordering of times, not the original interval structure.
Approach 2: Two-Pointer Sweep Line (O((n + q) log(n + q)) time, O(n) space)
This method treats the problem as a sweep line over time. Sort the flowers by start time and also sort the people by arrival time while keeping their original indices. Use two pointers to track which flowers start blooming and which ones finish as time moves forward. Increment a counter when a flower starts and decrement when it ends before the current time. As you process each person in sorted order, the counter represents the number of flowers currently blooming. This technique resembles event processing and often appears in array interval problems and sweep-line algorithms.
Recommended for interviews: The binary search method is the most commonly expected solution. It demonstrates strong understanding of sorting and query optimization with binary search. The sweep line or two-pointer approach shows deeper knowledge of event ordering and interval processing. Mentioning both signals that you recognize multiple ways to convert interval queries into efficient lookups instead of brute force scanning.
| Approach | Time | Space | When to Use |
|---|---|---|---|
| Binary Search on Start/End Arrays | O((n + q) log n) | O(n) | Best general solution for many queries; simple and interview-friendly |
| Two-Pointer Sweep Line | O((n + q) log(n + q)) | O(n) | Useful when processing events chronologically or implementing interval sweeps |