#887

Super Egg Drop

Hard
MathBinary SearchDynamic ProgrammingDynamic ProgrammingBinary Search
LeetCode ↗

Approaches

Brute ForceOptimal
Complexity Comparison
Brute ForceOptimal Solution
Time
O(n²)
O(kn²)
Space
O(1)
O(kn)
💡

Intuition

Time O(kn²)Space O(kn)

Using dynamic programming, we can minimize the number of moves by strategically choosing which floor to drop from. This approach balances the worst-case scenarios of breaking and not breaking eggs, leading to fewer total drops.

⚙️

Algorithm

3 steps
  1. 1Step 1: Create a DP table where dp[i][j] represents the minimum number of moves needed with i eggs and j floors.
  2. 2Step 2: Initialize the base cases: dp[i][0] = 0 (0 floors) and dp[1][j] = j (1 egg).
  3. 3Step 3: Fill the DP table using the formula: dp[i][j] = min(1 + max(dp[i-1][x-1], dp[i][j-x])) for x in 1 to j.
solution.py14 lines
1def superEggDrop(k, n):
2    dp = [[0] * (n + 1) for _ in range(k + 1)]
3    for j in range(1, n + 1):
4        dp[1][j] = j
5    for i in range(2, k + 1):
6        for j in range(1, n + 1):
7            dp[i][j] = float('inf')
8            for x in range(1, j + 1):
9                res = 1 + max(dp[i-1][x-1], dp[i][j-x])
10                dp[i][j] = min(dp[i][j], res)
11    return dp[k][n]
12
13# Example usage
14print(superEggDrop(2, 6))  # Output: 3

Complexity note: The time complexity is O(kn²) because we fill a DP table of size k x n, and for each entry, we may check all floors, leading to a quadratic factor.

  • 1Understanding the trade-off between breaking and not breaking eggs is crucial.
  • 2Dynamic programming helps optimize the number of moves by reusing previously computed results.

Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.