Advertisement
Alexxik

Untitled

Sep 17th, 2023
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.39 KB | None | 0 0
  1. // MARK: - 42. Trapping Rain Water
  2. // По ландшафту определите определите сколько блоков воды осталось после дождя в низинах на острове
  3.  
  4. // Находим маскимум
  5. // Все что левее максимума будет стекать влево, аналогично справа от максимума
  6. // для левой части будем запоминать максимум
  7.  
  8. func waterBlocks(arrayBlocks: [Int]) -> Int {
  9.     var maxIndex = 0
  10.     var max = arrayBlocks[maxIndex]
  11.     for index in 0..<arrayBlocks.count {
  12.         if arrayBlocks[index] > max {
  13.             max = arrayBlocks[index]
  14.             maxIndex = index
  15.         }
  16.     }
  17.     var totalWater = 0
  18.     var maxHeight = arrayBlocks[0]
  19.     for index in 0...maxIndex {
  20.         if arrayBlocks[index] > maxHeight {
  21.             maxHeight = arrayBlocks[index]
  22.         }
  23.         totalWater += maxHeight - arrayBlocks[index]
  24.     }
  25.     maxHeight = arrayBlocks[arrayBlocks.count-1]
  26.     for index in stride(from: arrayBlocks.count - 1, through: maxIndex, by: -1) {
  27.         if arrayBlocks[index] > maxHeight {
  28.             maxHeight = arrayBlocks[index]
  29.         }
  30.         totalWater += maxHeight - arrayBlocks[index]
  31.     }
  32.     return totalWater
  33. }
  34.  
  35. let arrayBlocks = [3, 1, 4, 3, 5, 1, 1, 3, 1]
  36. waterBlocks(arrayBlocks: arrayBlocks)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement