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] <= 109This approach involves sorting the start and end times of the flowers separately. For each person’s arrival time, we use binary search to determine how many flowers have started blooming and how many have stopped. The difference will give us the number of flowers in full bloom.
In this implementation, we first extract and sort the start and end times separately. When iterating over each person's arrival time, we use bisect_right to count how many flowers have started to bloom by that time and bisect_left to count how many flowers have finished blooming by that time. The difference gives the number of flowers that are blooming.
C++
Time Complexity: O((m + n) log m), where m is the number of flowers and n is the number of people.
Space Complexity: O(m), since we store the start and end times separately.
This approach optimizes the flower counting by utilizing a two-pointer method after sorting both the start and end times, as well as people’s arrival times. This helps reduce unnecessary recomputation and simplifies the logic.
This JavaScript solution employs the two-pointer technique to traverse sorted start and end times while adjusting the count of currently blooming flowers. The people’s arrival times are first mapped to their original indices and sorted, ensuring the results are recorded in the correct order.
Time Complexity: O(m log m + n log n), where m is the number of flowers and n is the number of people, containing costs for sorting and linear traversal.
Space Complexity: O(m + n), for holding sorted intervals and the result array.
| Approach | Complexity |
|---|---|
| Binary Search Approach | Time Complexity: O((m + n) log m), where m is the number of flowers and n is the number of people. |
| Two-pointer Technique | Time Complexity: O(m log m + n log n), where m is the number of flowers and n is the number of people, containing costs for sorting and linear traversal. |
Number of Flowers in Full Bloom - Leetcode 2251 - Python • NeetCodeIO • 13,835 views views
Watch 9 more video solutions →Practice Number of Flowers in Full Bloom with our built-in code editor and test cases.
Practice on FleetCode