zoukankan      html  css  js  c++  java
  • 盛水最多的容器

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

    第一遍用暴力解法:

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

    方法2:

    有人说水的最大体积由最长木板决定,只有移动短的木板那头,才有可能使得水

    的体积变大。好像称作双指针。

    class Solution {
    public:
        int maxArea(vector<int>& height) {
            int left = 0;
            int right = height.size()-1;
            int region = right * min(height[0], height[right]);
            while(left < right) {
                region = max(region, (right-left) * min(height[right], height[left]));
                //cout << left << "," << right << " ";
                if(height[left] < height[right] ) {
                    left++;
                } else {
                    right--;
                }
            }
            
            return region;
        }
    };
    The Safest Way to Get what you Want is to Try and Deserve What you Want.
  • 相关阅读:
    多线程按序打印1-100
    负载均衡算法
    day05_05 for循环、break语句
    day05_04 数据类型-数值、布尔值、字符串简介
    day05_03 字符串格式化
    day05_02 IDE介绍及设置
    小甲鱼零基础入门PYTHON
    day01_14.遍历数组
    day01_13.数组
    day01_11.break和continue
  • 原文地址:https://www.cnblogs.com/Shinered/p/11222925.html
Copyright © 2011-2022 走看看