zoukankan      html  css  js  c++  java
  • 11.Container With Most Water

    给定一个数组,数组中的数字在坐标系中按柱状图分布,选取两根柱子,与横坐标形成水池,求最大的水池面积。

    Input: [1,8,6,2,5,4,8,3,7]
    Output: 49

    思路:
    一开始运用暴力结题,O( n*n )的时间复杂度,然而不AC。
    看了答案,运用两个下标 left = 0, right = n-1 ,每次移动 left和right中值最小的那一个,因为木桶原理木桶的容量取决于最短的那块木板,只有把短板补长,才能使木桶容量更大。每一次移动得到的面积都要和已有的面积比较,若新的更大,则更新之前的。这样,能在线性复杂度下AC。

    int maxArea(vector<int>& height) {
        int n = height.size(), res = 0, l = 0, r = n - 1;
        while (l < r) {
            int min = height[l] > height[r] ? height[r] : height[l];
            int area = min * (r - l);
            res = area > res ? area : res;
            if (height[l] > height[r]) r--;
            else l++;
        }
        return res;
    }
  • 相关阅读:
    Arrays类总结
    多维数组
    数组
    写一个计算器,要求实现加减乘除功能,能够循环接收收据,通过用户交互实现
    递归
    方法
    函数
    流程控制
    mysql笔记(连接与子查询部分)
    ubuntu下mysql的常用命令
  • 原文地址:https://www.cnblogs.com/luo-c/p/12902406.html
Copyright © 2011-2022 走看看