LeetCode---Container with most water


了解答案之后觉得这道题确实不是一道很难的题目,但是在做的时候也是各种纠结怎么做。

记录一下自己的解题心路历程吧
1. 遍历所有的数值,然后比较每个点的flag值的大小,运行时间肯定超了;

2. 后来,一想到只要找到比当前点值大的点就达到遍历的目的,精简后还是时间超了;

3. 针对每个点从距离最远的点开始遍历直到找到大于该点的值,时间还是超了;

4. 然后借鉴了Gitbooks上一个小伙伴的解题思路 https://siddontang.gitbooks.io/leetcode-solution/content/array/largest_rectangle_in_histogram.html ,但是他的题目是矩形和本题的线的求解不同,但是他使用的队列的思路非常好,只可惜不符合本题;

5. 最后,还是美其名曰的借鉴了LeetCode提供的答案:

从两侧开始找最大的矩形,有且仅有下一个矩形的高度增加的面积大于宽度减小的面积,下一个矩形才有可能面积大于两侧最宽的矩形;因此从两侧依次往里遍历,在宽度减小的情况下,使下一个矩形的高度大于之前的矩形高度;其实是一个控制变量的思路,先找到宽度最大的矩形,然后变化高度,保证宽度减小面积也能增大。

具体代码如下:

#include
  
  
   
   
#include
   
   
    
    
#include
    
    
     
     
#include
     
     
      
      

using namespace std;

class Solution {
public:
	int maxArea(vector
      
      
        & height) { //考虑两边最有可能成为最大值的情况:边的长度增加的好处大于宽度缩小的好处; //对应的情况就是关键边边长,宽度减小。 int l = 0; int r = height.size() - 1; int sum = 0; while (l 
       
         nums1(&a[0], &a[len1]); double result; result = sol.maxArea(nums1); cout << result << endl; system("pause"); } 
        
      
     
     
    
    
   
   
  
  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值