LeetCode 2300: Successful Pairs of Spells and Potions

Summary

For each spell, count how many potions make spell * potion >= success. Sort potions and binary search the threshold.

Approach

  • Sort potions.
  • For each spell, compute need = ceil(success / spell).
  • Use binary search to find the first potion >= need.

Complexity

  • Time: O(n log n)
  • Space: O(1) extra (or O(n) if sorting a copy)

Python reference implementation

import bisect
import math

def successful_pairs(spells, potions, success):
    potions = sorted(potions)
    n = len(potions)
    res = []
    for s in spells:
        need = (success + s - 1) // s
        idx = bisect.bisect_left(potions, need)
        res.append(n - idx)
    return res