[LeetCode] Hard-2251. 花期内花的数目 - 二分查找/有序数组

Problem: 2251. 花期内花的数目

2251. 花期内花的数目

思路

看题目应该是一道比较经典的差分,本来准备拿差分数组做的,后来搂了一眼题解,发现用二分的方法更简单

解题方法

此题有一种很简便的方法,第i个人到达时间为people[i],所以我们不难找到在这个时间之前花期已经开始的花的数量,即v1=start <= people[i];同理我们也可以找到在这之前花期已经结束的花的数量,即v2=end < people[i];由此不难得出花开数目即为v1-v2,而上述思路中找到在某个时间点之前花期开始或者结束的数目我们在有序数组starts和ends内用二分查找即可很好的解决这个问题,因此我们在处理好输入数据后还需要让starts和ends有序即可。

Code

c 复制代码
class Solution {
public:
  vector<int> fullBloomFlowers(vector<vector<int>>& flowers, vector<int>& people) {
      vector<int> ans;
      int n = flowers.size();
      vector<int> starts(n), ends(n);
      for(int i=0;i<n;i++){
          starts[i] = flowers[i][0];
          ends[i] = flowers[i][1];
      }
      sort(starts.begin(), starts.end());
      sort(ends.begin(), ends.end());
      int n2 = people.size();
      for(int i=0;i<n2;i++){
          int v1 = upper_bound(starts.begin(), starts.end(), people[i]) - starts.begin();
          int v2 = lower_bound(ends.begin(), ends.end(), people[i]) - ends.begin();
          ans.push_back(v1-v2);
      }
      return ans;
  }
};
相关推荐
weixin_3077791334 分钟前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
2601_949950635 小时前
练题簿在线免费刷题 从资料整理到考前自测
面试·职场和发展·pdf·word·刷题
hetao17338376 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
Zootopia6267 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
longlongzihan7 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划
2601_960356388 小时前
2027校招采购岗解析:数学基础如何迁移到需求预测、成本与供应商分析
人工智能·算法
h_a_o777oah8 小时前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO98 小时前
指针的算术运算详解
java·数据结构·算法
Coder-magician8 小时前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
lsc_blog8 小时前
远程和居家办公的经历,技术简历上怎么摆
面试·职场和发展·重构·pdf·求职招聘