DP with sliding window.
Solution:
# T:O(n^2) S:O(n) class Solution(object): def maximalSquare(self, matrix): """ :type matrix: List[List[str]] :rtype: int """ if not matrix: return 0 m, n = len(matrix), len(matrix[0]) size = [[0 for j in xrange(n)] for i in xrange(2)] max_size = 0 for j in xrange(n): if matrix[0][j] == '1': size[0][j] = 1 max_size = max(max_size, size[0][j]) for i in xrange(1, m): if matrix[i][0] == '1': size[i % 2][0] = 1 else: size[i % 2][0] = 0 for j in xrange(1, n): if matrix[i][j] == '1': size[i % 2][j] = min(size[i % 2][j - 1], \ size[(i - 1) % 2][j], \ size[(i - 1) % 2][j - 1]) + 1 max_size = max(max_size, size[i % 2][j]) else: size[i % 2][j] = 0 return max_size * max_sizeRun Time: 136 ms
No comments:
Post a Comment