leetcode盛最多水的容器

leetcode盛最多水的容器_第1张图片

1.暴力法

代码如下

class Solution {
public:
    int maxArea(vector& height) {
        int imax=0;
        for(int i=0;i

结果超时

2.双指针

首先设指针Left指向第一个元素,指针right指向最后一个元素

此时容器的底是最宽的,高位height[left],height[right]的最小值

当指针移动时,无论是left右移还是right左移,容器的底都是变小的,且left+1,与rihgt-1两种操作容器的底的宽度都是一样的,能改动的就是容器的高,此时,我们判断height[left],height[right]哪一个值小,放弃较小的值,保留较大的值,这样容器的面积才可能增大

设指针未移动指针面积为min(height[left],height[right])*(right-left)

则移动后的宽为right-left-1

如果不放弃较小的值,假设height[left]较小,即保留height[left],则此时容器的高为   min(height[left],height[right-1]),     高一定小于等于height[left],,,,,,,且宽度变小了,所以此时容器的面积一定小于之前的,故应该保留较大的值

 

代码如下:

class Solution {
public:
    int maxArea(vector& height) {

       int len=height.size();
       int left=0,right=len-1;
       int ans=0;
       while(left

 

你可能感兴趣的:(leetcode盛最多水的容器)