首页 > 学院 > 开发设计 > 正文

11. Container With Most Water Medium

2019-11-06 07:10:10
字体:
来源:转载
供稿:网友

一开始我写了个两层循环的程序,没想到居然超时了,有个样本居然是一个15000到1的数组,所以O(n^2)还不够

然后网上看了个提示,才想到O(n)的算法

主要思想:从最两边组成的桶开始计算,如果还有更优解,那更优解的边就是这个桶的子集,且一定有一边比当前最短 边长,这时只需要从这个桶比较短的那边开始向中间遍历(桶的容积取决与短的那一边),这样就变成了跟前面一样的一个子问题,直到这个桶的两边重合为止。

这里怕超时,想到个小技巧,如果从短的那边开始遍历,下一个边更短,不需要计算,直接跳过。(实际感觉很鸡肋。。。代码还变丑了,所以这里放精简版)

class Solution {public:    int maxArea(vector<int>& height) {        int size = height.size();        int max = 0, i = 0, j = size - 1;        while(i != j){        int low = height[i] < height[j] ? height[i] : height[j];        if((j - i) * low > max) max = (j - i) * low;        if(height[i] < height[j])  i++;        else  j--;        }        return max;    }};


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表