算法题 |
算法刷题专栏 | 面试必备算法 | 面试高频算法
越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
作者简介:硕风和炜,CSDN-Java领域新星创作者,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享
恭喜你发现一枚宝藏博主,赶快收入囊中吧
人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?
算法题 |
给你两个正整数数组 spells 和 potions ,长度分别为 n 和 m ,其中 spells[i] 表示第 i 个咒语的能量强度,potions[j] 表示第 j 瓶药水的能量强度。
同时给你一个整数 success 。一个咒语和药水的能量强度 相乘 如果 大于等于 success ,那么它们视为一对 成功 的组合。
请你返回一个长度为 n 的整数数组 pairs,其中 pairs[i] 是能跟第 i 个咒语成功组合的 药水 数目。
示例 1:
输入:spells = [5,1,3], potions = [1,2,3,4,5], success = 7
输出:[4,0,3]
解释:
输入:spells = [3,1,2], potions = [8,5,8], success = 16
输出:[2,0,2]
解释:
提示:
n == spells.length
m == potions.length
1 <= n, m <= 105
1 <= spells[i], potions[i] <= 105
1 <= success <= 1010
class Solution {
public int[] successfulPairs(int[] spells, int[] potions, long success) {
int n=spells.length,m=potions.length;
int[] ans=new int[n];
Arrays.sort(potions);
for(int i=0;i<n;i++){
long num=(success+(long)(spells[i]-1))/(long)spells[i];
int ansIndex=findX(potions,num);
ans[i]=m-ansIndex-1;
}
return ans;
}
public int findX(int[] potions,long num){
int left=-1,right=potions.length;
while(left+1<right){
int mid=(left+right)/2;
if(potions[mid]<num){
left=mid;
}else{
right=mid;
}
}
return left;
}
}
最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉! |