11.go 787 B

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