LeetCode刷题笔记(十一)盛最多水的容器

题目:给定 n 个非负整数 a1a2,...,an,每个数代表坐标中的一个点 (iai) 。画 n 条垂直线,使得垂直线 i 的两个端点分别为 (iai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

注意:你不能倾斜容器,n 至少是2。

解法1:暴力

class Solution {
    public int maxArea(int[] height) {
        
        int len = height.length;
        int result = 0;
        int temp = 0;
        
        for(int i = 0;i < len;i++){
            for(int j = i+1;jresult){
                     result = temp;
                 }
            }
        }
        return result;  
    }
}

这种计算就是循环嵌套遍历,得出最大的面积;这种在leetcode是超时的;

时间复杂度:O(n^2);

空间复杂度:O(1);

解法2:

class Solution {
    public int maxArea(int[] height) {
        
        int result = 0;
        int left = 0;
	int temp = 0;
        int right = height.length-1;
        
        while(left result ? temp : result;
            if(height[left]

这里是从两端向中间依次计算,因为计算面积取决于两个点低的那一个,所以把低的那一个向中间移一个位置,再计算。

时间复杂度:O(n);

空间复杂度:O(1);

你可能感兴趣的:(LeetCode刷题)