Problem:

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

Note: You may not slant the container.

题目的意思是,在(x,y)坐标中,每个点做与x轴垂直的直线后,求哪两根直线和x轴所能装的水最多,不能倾斜的意思就是不是指梯形的面积,而是短板效应的矩形面积。先暴力试了下,练了下手感。不出所料N方的超时。

class Solution {
public:
int maxArea(vector<int> &height)
{
int area = , temparea;
int *temp = new int[height.size()];
for (int i = ; i < height.size(); i++)
{
int maxN = ;
for (int j = ; j < height.size(); j++)
{
if (i != j)
{
temparea = (height[i]<height[j]?height[i]:height[j]) * abs(j - i);
if (temparea > maxN)
maxN = temparea;
}
}
temp[i] = maxN;
}
for (int i = ; i < height.size(); i++)
{
if (temp[i] > area)
area = temp[i];
}
delete[] temp;
return area;
}
};

后来还想,能不能排序之后再判断,发现sort又是不稳定的所以就放弃了。后来发现可以从两边往里收缩的办法解决。两边往里的还有第一题Two Sum也是这样做的。

为什么用两边往里呢,因为我们我们要的面积是两条直线的距离*两条直线短的那条的值,所以,我们先定一个,距离最大就是头和尾了,如果比这个距离小的,又还想比我现在大的话,那就只有高增加才有可能,这个时候就是把短的那条对应的位置往前看一位,看看可不可能有比短的长,且乘出来的面积是比之前大的,如果大,那就记录下来。为什么要用短的那边往里看呢,因为如果长的往里的话,就是下去一根再长也是根据短板效应看短的。根据这个思路自己整理了下代码如下:

class Solution {
public:
int maxArea(vector<int> &height)
{
int left = , right = height.size() - ;
int maxA = ;
while(left < right)
{
if (height[left] < height[right])
{
int tmp = (right - left) * height[left];
left++;
if (tmp > maxA)
maxA = tmp;
}
else
{
int tmp = (right - left) * height[right];
if (tmp > maxA)
maxA = tmp;
right--;
}
}
return maxA;
}
};

这样就Accept了

2015/03/29:

class Solution {
public:
int maxArea(vector<int> &height) {
int l = , r = height.size()-, water = ;
while(l < r){
water = max(water, (r - l) * (height[l] > height[r] ? height[r--] : height[l++]));
}
return water;
}
};

python:

class Solution:
# @return an integer
def maxArea(self, height):
water, l, r = 0, 0, len(height)-1
while l < r:
water = max(water, (r - l)*min(height[l], height[r]))
if height[l] < height[r]:
l += 1
else:
r -= 1
return water

最新文章

  1. Python之路 day3 全局变量、局部变量
  2. UnicodeDecodeError: ‘XXX&#39; codec can&#39;t decode bytes in position X 的问题
  3. windows下安装composer抛出Composer\Downloader\TransportException异常解决办法
  4. 【C-01关键字】
  5. 在公司内网上创建自己的 OSM.Planet 街道级别地图服务器及其客户端程序
  6. winform学习之-----关于按键操作的一些小知识(如何获取焦点所在的当前控件)20160623
  7. quick 2.23 它们的定义c++代码lua与总结的一些细节
  8. cocos2d-x3.0 windows 环境配置
  9. STM8S003/005/007芯片解密单片机解密程序提取复制经验分享!
  10. 【Beta】阶段 第五次Daily Scrum Meeting
  11. 00_HTML入门第二天
  12. Linux下查看CPU、内存和硬盘信息命令
  13. JavaScript 动态显示当前时间
  14. Doom HDU - 5239 (找规律+线段树)
  15. 最简单的 nginx 负载均衡,只能演示,企业中最好不用
  16. SQLServer之创建视图
  17. How To Setup a CA
  18. IntelliJ IDEA安装bower
  19. 互联网创业公司如何防御 DDoS 攻击?采用CDN服务
  20. sqlalchemy 简介

热门文章

  1. NSIS:强制结束软件进程
  2. 每天收获一点点------Hadoop RPC机制的使用
  3. oracle HA 高可用性具体解释(之中的一个)
  4. iOS学习笔记---简单的学习总结
  5. jsp 说明标签
  6. 浅谈JavaScript中的柯里化函数
  7. 【iOS发展-70】点菜系统案例:使用文本框inputView和inputAccessoryView串联UIPickerView、UIDatePicker和UIToolBar
  8. Util
  9. DirectX11 学习笔记3 - 创建一个立方体 和 轴
  10. WeakReference and WeakHashMap