首页 > 其他分享 >[LeetCode] 2251. 花期内花的数目 - 二分查找/有序数组

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

时间:2023-09-28 22:31:42浏览次数:43  
标签:二分 ends people starts 花期 vector 内花 LeetCode 2251

Problem: 2251. 花期内花的数目

思路

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

解题方法

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

Code


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;
  }
};

标签:二分,ends,people,starts,花期,vector,内花,LeetCode,2251
From: https://blog.51cto.com/u_15567308/7643819

相关文章

  • LC2251 花期内花的数目
    方法一:差分因为是先修改后查询,很容易想到差分,但因为数据值域\([-10^9,10^9]\)过大,所以不能使用差分数组,而应用map进行存储,如代码所示:map<int,int>diff;//正常进行差分操作for(auto&f:flowers){diff[f[0]]++;diff[f[1]+1]--;}//dosomethingautoit......
  • [leetcode] 30. 串联所有单词的子串
    题目30.串联所有单词的子串给定一个字符串s和一个字符串数组words。words中所有字符串长度相同。s中的串联子串是指一个包含words中所有字符串以任意顺序排列连接起来的子串。例如,如果words=["ab","cd","ef"],那么"abcdef","abefcd","cdabef","cdefab",&quo......
  • [LeetCode] 1333. 餐厅过滤器
    Problem:1333.餐厅过滤器思路这道题目拿到手基本可以确定是一道大模拟题,基本思路在题目里面已经确定,主要的难点就在对结果的排序上,需要指定sort的排序规则解题方法首先对题目中给出的数组依照题目要求的过滤器规则进行遍历过滤,然后形成一个过滤后的新数组filtered,接着按照......
  • 算法训练day22 LeetCode235
    算法训练day22LeetCode235.701.450.235.二叉搜索树的最近公共祖先题目235.二叉搜索树的最近公共祖先-力扣(LeetCode)题解代码随想录(programmercarl.com)对于二叉树,可以用递归回溯的方式对于二叉搜索树,由其根节点大于左右子树中结点,所以当第一次遍历到根节点值......
  • 刷这几道LeetCode,掌握哈希表的三种类型
    基础知识常用代码  哈希表一共有3种哈希结构,分别是数组、set(集合)、map(映射)数组  数组就是把不同的元素映射到不同的地址运用数组创建哈希表,应当遵循以下两个原则:1.所映射的元素的数值种类不多(比如26个字母)2.映射关系比较好表达(比如26个字母,就可以用该元素-'a'作为映射)......
  • leetcode17、77
    回溯算法可以当作是二叉树的结构进行分析,看在叶节点的位置是什么条件收获结果每个抛进去的结果都是到叶子节点的路径以leetcode17为例:每一层遍历的是每一个号码对应的字符串,当号码全部遍历完成就可以返回结果,所以终止条件是(index==string.length());index是层数,string是号码。......
  • [LeetCode] 2582. Pass the Pillow
    Thereare n peoplestandinginalinelabeledfrom 1 to n.Thefirstpersoninthelineisholdingapillowinitially.Everysecond,thepersonholdingthepillowpassesittothenextpersonstandingintheline.Oncethepillowreachestheendofthel......
  • LeetCode54.螺旋数组
    本题关键在于模拟数组螺旋的步骤,使用 flag 二维数组标识矩阵某位置是否被访问过,使用 turn 变量指示当前寻找的方向, turn 为0时,代表向右查找, turn 为1时,代表向下查找, turn 为2时,代表向左查找, turn 为3时,代表向上查找,具体的代码如下:classSolution{publicList<......
  • 算法训练day20 LeetCode654
    算法训练day20LeetCode654.617.700.98654.最大二叉树题目654.最大二叉树-力扣(LeetCode)题解代码随想录(programmercarl.com)使用递归返回节点地址,输入父节点地址,数组终止条件是输入地数组为空单层操作:如果输入数组为空,则返回父节点地址否则找到数组中最大......
  • LeetCode 918. 环形子数组的最大和
    环形子数组的最大和(medium)题目链接:918.环形子数组的最大和题目描述:给定一个长度为n的环形整数数组nums,返回nums的非空子数组的最大可能和。环形数组意味着数组的末端将会与开头相连呈环状。形式上,nums[i]的下一个元素是nums[(i+1)%n],nums[i]的前一个元素......