11.go 780 B

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