盛最多水的容器(leetcode 11)

一:解题思路

方法一:暴力破解,Space:O(n^2),Space:O(1),这种方法时间复杂度太大,容易引起超时。

方法二:双指针,Time:O(n),Space:O(1)

二:完整代码示例 (C、C++、Java、Python)

方法一C:

int max(int a, int b) {
    return a > b ? a : b;
}

int min(int a, int b) {
    return a < b ? a : b;
}

int maxArea(int* height, int heightSize) {
    if (height == NULL || heightSize == 0) return 0;
    int maxValue = INT_MIN;
    int i = 0;
    int j = 0;
    int cur = 0;

    for (i = 0; i < heightSize; i++) {
        for (j = i+1; j < heightSize; j++) {
            cur = (j - i)*min(height[i],height[j]);
            maxValue = max(maxValue,cur);
        }
    }

    return maxValue;
}

方法一C++:

class Solution {
public:
    int maxArea(vector<int>& height) {
        if (height.size() == 0) return 0;
        int maxValue = INT_MIN;

        for (int i = 0; i < height.size(); i++) {
            for (int j = i + 1; j < height.size(); j++) {
                int cur = (j - i)*min(height[i],height[j]);
                maxValue = max(maxValue,cur);
            }
        }

        return maxValue;
    }
};

方法一Java:

方法一Python:

import sys
from typing import List
class Solution:
    def maxArea(self, height: List[int]) -> int:
        if not height: return 0
        maxValue=-sys.maxsize-1
        n=len(height)
        for i in range(0,n):
            for j in range(i,n):
                cur=(j-i)*min(height[i],height[j])
                maxValue=max(maxValue,cur)
        return maxValue

 

方法二C:

int max(int a, int b) {
    return a > b ? a : b;
}

int min(int a, int b) {
    return a < b ? a : b;
}

int maxArea(int* height, int heightSize) {
    if (height == NULL || heightSize == 0) return 0;
    int i = 0;
    int j = heightSize - 1;
    int maxValue = INT_MIN;
    while (i < j) {
        int cur = (j - i)*min(height[i],height[j]);
        maxValue = max(maxValue,cur);
        if (height[i] < height[j]) i++;
        else j--;
    }

    return maxValue;
}

方法二C++:

class Solution {
public:
    int maxArea(vector<int>& height) {
        if (height.size() == 0) return 0;
        int maxValue = INT_MIN;
        int i = 0;
        int j = height.size() - 1;

        while (i < j) {
            int cur = min(height[i], height[j])*(j-i);
            maxValue = max(maxValue,cur);
            if (height[i] < height[j]) i++;
            else j--;
        }

        return maxValue;
    }
};

 

方法二java:

方法二Python:

import sys
from typing import List
class Solution:
    def maxArea(self, height: List[int]) -> int:
        if not height: return 0
        maxValue=-sys.maxsize-1
        i=0
        n=len(height)
        j=n-1
        
        while i<j:
            cur=(j-i)*min(height[i],height[j])
            maxValue=max(maxValue,cur)
            if height[i]<height[j]:
                i=i+1
            else:
                j=j-1
        return maxValue

 

posted @ 2020-04-06 17:12  repinkply  阅读(227)  评论(0)    收藏  举报