• leetcode题解||Container With Most Water问题


    problem:

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai).
     n vertical lines are drawn such that the two endpoints of line i is at (i, ai) 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轴为底,两个纵轴为变,求容器的容积,短边是瓶颈。


    thinking:

    (1)短边决定水箱的有效高,底要尽可能的宽。

    (2)典型的双指针求解的题型。

    (3)贪心的策略,哪条边短,往里收缩寻找下一条边。

    code:

    class Solution {
    public:
        int maxArea(vector<int> &height) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            int i = 0;
            int j = height.size() - 1;
            
            int ret = 0;
            while(i < j)
            {
                int area = (j - i) * min(height[i], height[j]);
                ret = max(ret, area);
                
                if (height[i] <= height[j])
                    i++;
                else
                    j--;
            }
            
            return ret;
        }
    };

    时间复杂度为O(n)



    暴力破解法:时间复杂度为O(n*n)

    int area(vector<int>::iterator &a,vector<int>::iterator &b)
    {
        return (b-a)*(*a>*b?*b:*a);
    
    }
    
    class Solution {
    public:
        int maxArea(vector<int> &height) {
            int max_area=0;
            for(vector<int>::iterator i=height.begin()+1;i!=height.end();i++)
            {
                for(vector<int>::iterator j=height.begin();j!=i;j++)
                {
                    max_area=max(max_area,area(j,i));
                }
            }
            return max_area;
    
    
        }
    };


  • 相关阅读:
    C语言指针专题——如何理解指针
    C语言指针专题——序
    Java 第14章 字符串
    Java截图笔记
    Java 第五章 循环结构1
    Java 第六章 循环结构2
    Java 第13章 带参数的方法
    Java 第11章 类的无参方法
    Java 第四章 选择结构2
    Java 第三章 选择结构1
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6863733.html
Copyright © 2020-2023  润新知