赞
踩
最初的想法是直接采用最暴力的解题思路,遍历所有可能的情况,然后求得最大值。但最后还是看了题解,采用了更简单的思路,如下:
设计两头指针分别指向数组的开始和结尾,每次柱子较短的一方移动,头尾指针向中心靠拢。
移动规则,移动到比当前柱子更高的柱子为止,原因如下:
1)随着柱子的内移,容量的长会逐渐变短。
2)随着长不断变小,柱子作为容量的高如果不能增大则整体容量不会增大。
代码如下(Go语言实现):
- func maxArea(height []int) int {
- var start, end int = 0, len(height)-1
- var maxarea int = 0
- for start < end {
- hs := height[start]
- he := height[end]
- maxarea_ := Min(hs, he)*(end-start)
- maxarea = Max(maxarea, maxarea_)
- if hs<=he{
- for hs>=height[start] && start<end{
- start=start+1
- }
- }else{
- for he>=height[end] && start<end{
- end=end-1
- }
- }
- }
- return maxarea
- }
-
- func Max(a,b int) int {
- if a>=b{
- return a
- }else{
- return b
- }
- }
-
- func Min(a,b int) int {
- if a<=b{
- return a
- }else{
- return b
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。