dengxinyi 6 gadi atpakaļ
vecāks
revīzija
4f76f7095b
2 mainītis faili ar 74 papildinājumiem un 5 dzēšanām
  1. 65 5
      hard/85.go
  2. 9 0
      hard/87.go

+ 65 - 5
hard/85.go

@@ -1,9 +1,69 @@
 package main
 
-func maximalRectangle(matrix [][]byte) int {
-	return 0
+func 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() {
-
-}
+// 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))
+// }

+ 9 - 0
hard/87.go

@@ -0,0 +1,9 @@
+package main
+
+func isScramble(s1 string, s2 string) bool {
+	return false
+}
+
+func main() {
+
+}