标签搜索

盛最多水的容器

anker
2021-06-26 / 0 评论 / 44 阅读 / 正在检测是否收录...

最简单的做法是平方时间复杂。实现O(n)主要思想是双端开始遍历。每次移动时,需要考虑选择左还是右指针向中间移动,目的是减少暴力平方遍历次数。当宽度递减1时,能够增加面积的情况只能有一种,那就是更高的短板。如果在前进过程中,短
板更矮,则不需要算面积了,肯定变小

题目

class Solution {
public:
    int maxArea(vector<int>& height) {
        int max_area = 0;
        int len = height.size();
        int i = 0;
        int j = len - 1;
        int temp_area = 0;
        int diff = j - i;
        int min_height = -1;
        int iv, jv;
        while (i < j) {
            iv = height[i];
            jv = height[j];
            if (iv < jv) {
                if (min_height < iv) {
                    min_height = iv;
                    temp_area = diff * min_height;
                    if (temp_area > max_area) {
                        max_area = temp_area;
                    }
                }
                i++;
            }else {
                if (min_height < jv) {
                    min_height = jv;
                    temp_area = diff * min_height;
                    if (temp_area > max_area) {
                        max_area = temp_area;
                    }
                }
                j--;
            }
            diff--;
        }
        return max_area;
    }
};
0

评论 (0)

取消