LeetCode、2300. 咒语和药水的成功对数【中等,排序+二分】

文章目录

前言

博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。

涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。

博主所有博客文件目录索引:博客目录索引(持续更新)

视频平台:b站-Coder长路


LeetCode、2300. 咒语和药水的成功对数【中等,排序+二分】

来源:LeetCode专题《LeetCode 75》

题目及类型

题目链接:LeetCode、2300. 咒语和药水的成功对数

类型:基础算法/二分


思路及代码

思路:

首先对药水能量强度数组进行排序,接着我们去遍历所有的咒语,接着我们对药水能量数组进行二分,通过使用咒语与药水能量乘积来进行二分寻找边界值,来确定成功对数。

代码:

复杂度分析:时间复杂度O(n.logn);空间复杂度O(1)

java 复制代码
class Solution {

    //排序+二分
    //找到最右边不成功的组合的最后一个位置
    public int[] successfulPairs(int[] spells, int[] potions, long success) {
        int n = spells.length, m = potions.length;
        //结果数组
        int[] res = new int[n];
        //对potions升序
        Arrays.sort(potions);
        //遍历所有的药水
        for (int i = 0; i < n; i ++) {
            int ans = 0;
            //二分
            int l = 0, r = m - 1;
            while (l < r) {
                //若是拆分为[l, mid - 1]、[mid, r],那么一旦有r = mid - 1,需要+1为l + r + 1
                int mid = (l + r + 1) >> 1;
                // System.out.printf("mid=%d\n", mid);
                if (check(1L * spells[i] * potions[mid], success)) {
                    r = mid - 1;
                }else {
                    l = mid;
                }
            }
            //找到目标值
            // System.out.printf("%d %d\n", l, r);
            //全部成功(根据r的情况值来判定)
            if (r < 0 || (r == 0 && 1L * spells[i] * potions[0] >= success)) {
                ans = m;
            }else if (l >= m || (l == m - 1 && 1L * spells[i] * potions[m - 1] < success)) { //全部不匹配(根据l的情况值来判定)
                ans = 0;
            }else {
                //若是找到区间范围的
                ans = m - l - 1;
            }
            //将结果添加到结果集
            res[i] = ans;
        }
        return res;
    }

    //检测
    public boolean check(long cur, long success) {
        if (cur >= success) return true;
        return false;
    }

}

资料获取

大家点赞、收藏、关注、评论啦~

精彩专栏推荐订阅:在下方专栏👇🏻

更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅


整理者:长路 整理时间:2024.1.19

相关推荐
SKYDROID云卓小助手26 分钟前
无人设备遥控器之差分信号抗干扰技术
网络·stm32·单片机·嵌入式硬件·算法
美狐美颜SDK开放平台26 分钟前
什么是美颜sdk?美型功能开发与用户体验优化实战
人工智能·算法·ux·直播美颜sdk·第三方美颜sdk·视频美颜sdk
@宁兰1 小时前
算法实现总结 - C/C++
c语言·c++·算法
测试19981 小时前
如何用Appium实现移动端UI自动化测试?
自动化测试·软件测试·python·测试工具·ui·职场和发展·appium
Doro再努力1 小时前
2025_11_14洛谷【入门1】数据结构刷题小结
前端·数据结构·算法
蒙奇D索大2 小时前
【算法】回溯算法精讲:从深度优先搜索到剪枝优化
经验分享·笔记·算法·深度优先·剪枝·改行学it
QTreeY1232 小时前
yolov5/8/9/10/11/12/13+deep-oc-sort算法的目标跟踪实现
人工智能·算法·yolo·目标检测·计算机视觉·目标跟踪
_OP_CHEN2 小时前
算法基础篇:(六)基础算法之双指针 —— 从暴力到高效的优化艺术
c++·算法·acm·优化算法·双指针·oj题·算法蓝桥杯
cs麦子2 小时前
C语言--详解--指针--下
c语言·数据结构·算法
flashlight_hi2 小时前
LeetCode 分类刷题:3217. 从链表中移除在数组中存在的节点
javascript·数据结构·leetcode·链表