Medium
Egg Drop With 2 Eggs and N Floors — Python
Full explanation · Time O(1) · Space O(1)
# Time: O(1)
# Space: O(1)
import math
# see the proof: https://www.geeksforgeeks.org/puzzle-set-35-2-eggs-and-100-floors/
class Solution(object):
def twoEggDrop(self, n):
"""
:type n: int
:rtype: int
"""
return int(math.ceil((-1+(1+8*n)**0.5)/2))
# Time: O(k * n^2)
# Space: O(n)
class Solution2(object):
def twoEggDrop(self, n):
"""
:type n: int
:rtype: int
"""
K = 2
dp = [[float("inf") for j in xrange(n+1)] for _ in xrange(2)]
dp[1] = [j for j in xrange(n+1)]
for i in xrange(2, K+1):
dp[i%2][0] = 0
for j in xrange(1, n+1):
for k in xrange(1, j+1):
dp[i%2][j] = min(dp[i%2][j], 1+max(dp[(i-1)%2][k-1], dp[i%2][j-k]))
return dp[K%2][n]