| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | package mainfunc maximalRectangle(matrix [][]byte) (maxArea int) {	if len(matrix) == 0 {		return	}	hei := make([]int, len(matrix[0]))	for i := 0; i < len(matrix); i++ {		for j := 0; j < len(matrix[0]); j++ {			if matrix[i][j] == '1' {				hei[j]++			} else {				hei[j] = 0			}		}		// Now we can find the max rectangle in the hist :)		st := make([]int, 0)		k, l := 0, 0		for k < len(hei) {			if l == 0 || hei[k] >= hei[st[l-1]] {				st = append(st, k)				k, l = k+1, l+1			} else {				t := st[l-1]				st = st[:l-1]				l--				var area int				if l == 0 {					area = hei[t] * k				} else {					area = hei[t] * (k - st[l-1] - 1)				}				if area > maxArea {					maxArea = area				}			}		}		for l != 0 {			t := st[l-1]			st = st[:l-1]			l--			var area int			if l == 0 {				area = hei[t] * k			} else {				area = hei[t] * (k - st[l-1] - 1)			}			if area > maxArea {				maxArea = area			}		}	}	return}// func main() {// 	m := [][]byte{// 		{'1', '0', '1', '0', '0'},// 		{'1', '0', '1', '1', '1'},// 		{'1', '1', '1', '1', '1'},// 		{'1', '0', '0', '1', '0'}}// 	println(maximalRectangle(m))// 	m = [][]byte{// 		{'1', '0', '1', '0'},// 		{'1', '0', '1', '1'},// 		{'1', '0', '1', '1'},// 		{'1', '1', '1', '1'}}// 	println(maximalRectangle(m))// }
 |