Advertisement
HXXXXJ

85. Maximal Rectangle

Apr 14th, 2019
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.34 KB | None | 0 0
  1. func maximalRectangle(_ matrix: [[Character]]) -> Int {
  2.         let n = matrix.count
  3.         if n == 0 { return 0}
  4.         let m = matrix[0].count
  5.         if m == 0 { return 0}
  6.         var grid = [[Int]](repeating: [Int](repeating: 0 , count : m), count : n)
  7.        
  8.         for i in 0 ..< n{
  9.             for j in 0 ..< m{
  10.                 if i == 0 {
  11.                     if matrix[i][j] == "1" {  grid[i][j] = 1}
  12.                 }else{
  13.                     if matrix[i][j] == "1" { grid[i][j] +=  1 + grid[i - 1][j]}
  14.                 }
  15.             }
  16.         }
  17.         var res = 0
  18.         for i in 0 ..< n{
  19.             res = max(res, findMax(grid[i])  )
  20.         }
  21.        
  22.         return res
  23.     }
  24.    
  25.     func findMax(_ arr: [Int]) -> Int{
  26.         let h = arr + [0]
  27.         var indexStack = [Int]()
  28.         var hStack = [Int]()
  29.        
  30.        
  31.         var res = 0
  32.         for (index, h) in h.enumerated(){
  33.             while hStack.count > 0 && h < hStack.last!{
  34.                 let preh = hStack.removeLast()
  35.                 indexStack.removeLast()
  36.                 let preIndex = indexStack.count > 0 ? indexStack.last! : -1
  37.                 res = max(res , (index - preIndex - 1) * preh )
  38.             }
  39.            
  40.             indexStack.append(index)
  41.             hStack.append(h)
  42.         }
  43.         return res
  44.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement