11.go 707 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package main
  2. // 穷举
  3. func maxAreaOld(height []int) int {
  4. n := len(height)
  5. max := 0
  6. for left := 0; left < n-1; left++ {
  7. for right := 1; right < n; right++ {
  8. tmp := (right - left) * minInt(height[left], height[right])
  9. if tmp > max {
  10. max = tmp
  11. }
  12. }
  13. }
  14. return max
  15. }
  16. // DP?
  17. func maxArea(height []int) int {
  18. n := len(height)
  19. l, r := 0, n-1
  20. max := 0
  21. for l < r {
  22. hl, hr := height[l], height[r]
  23. tmp := (r - l) * minInt(hl, hr)
  24. if tmp > max {
  25. max = tmp
  26. }
  27. if hl < hr {
  28. for ; l < r && height[l] <= hl; l++ {
  29. }
  30. } else {
  31. for ; l < r && height[r] <= hr; r-- {
  32. }
  33. }
  34. }
  35. return max
  36. }
  37. /* func main() {
  38. arr := []int{1, 2, 4, 54, 6, 54}
  39. fmt.Println(maxArea(arr))
  40. } */