LeetCode_11

LeetCode_11

  • 题意以及限制条件
  • 想到的所有可能解法
  • 对应的代码
  • 测试样例

题意以及限制条件

  1. 题目:LeetCode_11_第1张图片LeetCode_11_第2张图片

  2. 限制条件:
    LeetCode_11_第3张图片

想到的所有可能解法

  • Ways——双指针:矩形的面积与两个因素有关:
    • 矩形的长度:两条垂直线的距离;
    • 矩形的宽度:两条垂直线其中较短一条的长度。
  • 因此,要矩阵面积最大化,两条垂直线的距离越远越好,两条垂直线的最短长度也要越长越好
  • 具体操作步骤:
    1. 设置两个指针 left 和 right,分别指向数组的最左端和最右端。此时,两条垂直线的距离是最远的;
    2. 若要下一个矩阵面积比当前面积来得大,必须要把 height[left] 和 height[right] 中较短的垂直线往中间移动,看看是否可以找到更长的垂直线。
  • 时间复杂度——O(n);空间复杂度——O(1)。

对应的代码

  • Ways_Code-1
class Solution {
     
    public int maxArea(int[] height) {
     

        int left = 0, right = height.length - 1;
        int cur_area = 0, final_area = 0;
        while (left < right) {
     
            cur_area = Math.min(height[left], height[right]) * (right - left);
            if (cur_area > final_area) final_area = cur_area;
            if (height[left] < height[right]) {
     
                ++left;
            }else {
     
                --right;
            }
        }
        return final_area;

    }
}
  • Ways_Code-2
class Solution {
     
    public int maxArea(int[] height) {
     
        
        int left = 0, right = height.length - 1;
        int ans = 0;
        while (left < right) 
            ans = height[left] < height[right] ? 
            Math.max(ans, (right - left) * height[left++]) : 
            Math.max(ans, (right - left) * height[right--]);
        return ans;
        
    }
}

测试样例

LeetCode_11_第4张图片

你可能感兴趣的:(LeetCode,leetcode,算法,指针)