2300.咒语和药水的成功对数

编程入门 行业动态 更新时间:2024-10-14 08:27:56

2300.咒语和药水的成功<a href=https://www.elefans.com/category/jswz/34/1722495.html style=对数"/>

2300.咒语和药水的成功对数

​​题目来源:

        leetcode题目,网址:2300. 咒语和药水的成功对数 - 力扣(LeetCode)

解题思路:

       将 potions 数组排序后二分查找能够满足要求的最小值即可。

解题代码:

class Solution {
public:vector<int> successfulPairs(vector<int>& spells, vector<int>& potions, long long success) {vector<int> res;sort(potions.begin(),potions.end());for(int i=0;i<spells.size();i++){long minPotion=success/spells[i]+(success%spells[i]==0?0:1);res.push_back(getNum(potions,minPotion));}return res;}int getNum(vector<int>& potions,long minPotion){int start=0;int end=potions.size()-1;if(potions[start]>=minPotion){return end-start+1;}start++;while(start<=end){int mid=start+(end-start)/2;if(potions[mid]>=minPotion && potions[mid-1]<minPotion){return potions.size()-mid;}else if(potions[mid]>=minPotion){end=mid-1;}else{start=mid+1;}}return 0;}
};

总结:

        注意边界条件。

        官方题解给出了两种 解法。第一种是二分。第二种双指针,是将两个数组都排序后使用双指针查找,然后再按原来的顺序输出。

        C++ upper_bound(begin,end,num) 从数组的begin 位置到 end-1 位置二分查找第一个大于num 的数字。

        C++ lower_bound(begin,end,num) 从数组的begin 位置到 end-1 位置二分查找第一个小于等于 num 的数字。


更多推荐

2300.咒语和药水的成功对数

本文发布于:2023-11-15 15:30:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1602007.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对数   药水   咒语

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!