力扣-咒语和药水的成功对数

思路分析

  1. 先对药水数组排序,为二分查找打基础;
  2. 对每个咒语,计算出满足条件的「最小药水值」;
  3. 用二分查找快速找到这个最小药水值在排序后数组中的位置;
  4. 位置之后的所有药水都满足条件,用 "数组长度 - 位置" 得到符合条件的数量。

代码实现

对二分法不太了解的小伙伴可以看下这篇文章二分查找进阶指南:从 "找一个数" 到 "锁定左右边界",逻辑因果与代码实现全解析

java 复制代码
public int[] successfulPairs(int[] spells, int[] potions, long success) {
    // 定义返回数据
    int[] res = new int[spells.length];
    // 对potions排序
    Arrays.sort(potions);
    // 遍历spells 数组,计算满足条件的potions 数量
    for (int i = 0; i < spells.length; i++) {
        // 计算满足 spell * potions[j] >= success 的最小j, 其中 j 为下标
        long target = (spells[i] + success - 1) / spells[i];
        int j = binarySearch(potions, target);
        // 计算满足条件的potions 数量
        int curNum = potions.length - j;
        res[i] = curNum;
    }
    // 返回
    return res;
}

/**
 * @Author Feng
 * @Description  二分查找,查找第一个大于等于target的下标
 * @Date 2026/1/17
 * @Param [nums, target]
 * @return int
 **/
public int binarySearch(int[] nums, long target){
    int left = 0, right = nums.length;
    while (left < right){
        int mid = left +(right - left)/2;
        if (nums[mid] == target){
            right = mid;
        } else if(nums[mid] < target){
            left = mid + 1;
        } else{
            right = mid;
        }
    }
    return left;
}

复杂度分析

  • 时间复杂度:O (m logm + n logm)
  • 空间复杂度:O (logm)(或 O (m),取决于排序实现)
相关推荐
我命由我123456 分钟前
Android 开发问题:TopAppBar 和 topAppBarColors API is experimental...
android·java·java-ee·kotlin·android studio·android jetpack·android-studio
AC赳赳老秦14 分钟前
语义采集进阶实战:利用 OpenClaw AI 语义识别自动提取网页核心信息,无需手动编写选择器
java·运维·服务器·python·信息可视化·deepseek·openclaw
码匠许师傅15 分钟前
【C++ 面试真题】20. 聊聊 C++ 的标准库常用算法
c++·算法·面试
AI人工智能+电脑小能手18 分钟前
大白话说Java设计模式-23-桥接模式(源码剖析篇)
java·设计模式·jdbc·桥接模式·源码分析·awt·java logging
李高钢25 分钟前
C# WPF Prism 进阶(二):区域(Region)与模块化(Module)
java·前端·数据库
long31627 分钟前
枚举(Enums)
java·开发语言·数据库
m0_5474866643 分钟前
《数据结构与算法(Python语言版)》全套PPT课件2026
数据结构·算法
墨雨晨曦881 小时前
2026/08/15 spring AI学习总结
java·tomcat
wno7041 小时前
Spring Boot JdbcTemplate配置Druid多数据源
java·spring boot·后端
个 人 练 习 生1 小时前
数据结构入门:算法复杂度
开发语言·数据结构·经验分享·学习·程序人生·算法