Medium
Median of a Row Wise Sorted Matrix — Python
Full explanation · Time O(logr * mlogn) · Space O(1)
# Time: O(logr * mlogn), r = O(right-left+1) = O(10^6), O(logr) = O(20)
# Space: O(1)
import bisect
# binary search
class Solution(object):
def matrixMedian(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
def check(x):
return sum(bisect_right(row, x) for row in grid) > (len(grid)*len(grid[0]))//2
left, right = min(row[0] for row in grid), max(row[-1] for row in grid)
while left <= right:
mid = left + (right-left)//2
if check(mid):
right = mid-1
else:
left = mid+1
return left