LeetCode 2251. Количество цветков в период цветения: сорт + бинарный.

【LetMeFly】2251. Количество цветков в период цветения: сортировка + два балла.

Ссылка на вопрос о Leetcode: https://leetcode.cn/problems/number-of-flowers-in-full-bloom/

Вам дан двумерный целочисленный массив с индексами,  начинающимися  с 0flowers  , который   представляет  период цветения  -го цветка  от   до   (все включено ). При этом вам дан  целочисленный массив с  индексами, начинающимися с 0  ,  и размером 0  — это   время, потраченное первым человеком.flowers[i] = [starti, endi]istartiendinpersonspersons[i]i

Пожалуйста, верните n целочисленный массив размера  , где  количество  цветов в период цветения, когда  прибывает первый  человек  . answeranswer[i]i

 

Пример 1:

Ввод: цветы = [[1,6],[3,7],[9,12],[4,13]], люди = [2,3,7,11]
 Выход: [1,2,2, 2]
 Пояснение: На рисунке выше показано время цветения каждого цветка и время прибытия каждого человека. 
Для каждой особи мы возвращаем количество цветов в период цветения, когда они появились.

Пример 2:

Ввод: цветы = [[1,10],[3,3]], люди = [3,3,2]
 Выход: [2,2,1]
 Объяснение: на рисунке выше показано время цветения каждого цветка, а Время прибытия для всех. 
Для каждой особи мы возвращаем количество цветов в период цветения, когда они появились.

 

намекать:

  • 1 <= flowers.length <= 5 * 104
  • flowers[i].length == 2
  • 1 <= starti <= endi <= 109
  • 1 <= persons.length <= 5 * 104
  • 1 <= persons[i] <= 109

Способ 1: сортировка + деление

Поместите все времена цветения в массив и отсортируйте их от меньшего к большему; поместите все закрытые времена цветения в массив и отсортируйте их от меньшего к большему.

На определенный момент (определенный день) количество цветущих в данный момент цветов составляет: количество цветков со временем цветения меньше или равное текущему времени - количество закрытых цветков меньше или равное текущему времени количество цветов со временем цветения меньше или равным текущему времени - количество закрытых цветков Количество цветков меньше или равное дню, предшествующему текущему времениКоличество цветов, время цветения которых меньше или равно текущему времени.Количество закрытых цветков меньше или равно количеству цветов за день до текущего времени .

Как быстро получить неубывающий массив aaa in≤ k \leq kЧисло элементов k ? Всего два пункта. (upper_bound в C++/bisect_right в Python)

  • Временная сложность O ( ( n + m ) log ⁡ n ) O((n + m)\log n)О (( н+м )ло гn ) , кромеn= len (цветы) n = len (цветы)н"="l e n ( цветы ) m = len (люди) m = len ( люди )м"="л е н ( люди ) _ _ _
  • Пространственная сложность O ( n ) O(n)O ( n ) , возвращаемое значение не включено в сложность пространства алгоритма.

Код переменного тока

С++
class Solution {
    
    
public:
    vector<int> fullBloomFlowers(vector<vector<int>>& flowers, vector<int>& people) {
    
    
        vector<int> start(flowers.size()), end(flowers.size()), ans(people.size());
        for (int i = 0; i < flowers.size(); i++) {
    
    
            start[i] = flowers[i][0];
            end[i] = flowers[i][1];
        }
        sort(start.begin(), start.end());
        sort(end.begin(), end.end());

        for (int i = 0; i < people.size(); i++) {
    
    
            // 到这一天为止的开花总数 - 到这一天的前一天为止的闭花总数
            int hanagasaku = upper_bound(start.begin(), start.end(), people[i]) - start.begin();  // 花が咲く(はながさく)
            int hanagatiru = upper_bound(end.begin(), end.end(), people[i] - 1) - end.begin();//  花が散る(はながちる)
            ans[i] = hanagasaku - hanagatiru;
        }
        return ans;
    }
};
Питон

Верно и просто!

# from typing import List
# from bisect import bisect_right

class Solution:
    def fullBloomFlowers(self, flowers: List[List[int]], people: List[int]) -> List[int]:
        start = sorted([f[0] for f in flowers])
        end = sorted([f[1] for f in flowers])
        return [bisect_right(start, p) - bisect_right(end, p - 1) for p in people]

Статья одновременно публикуется на CSDN. Быть оригинальным непросто. Пожалуйста, прикрепите ссылку на оригинал статьи после перепечатки с согласия автора ~
Tisfy: https://letmefly.blog.csdn.net/article/details/133378624

рекомендация

отblog.csdn.net/Tisfy/article/details/133378624