题解 | #盛水最多的容器#

盛水最多的容器

https://www.nowcoder.com/practice/3d8d6a8e516e4633a2244d2934e5aa47?tpId=196&tqId=39308&ru=/exam/oj

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

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

int maxArea(int* height, int heightSize) {
    int left = 0;
    int right = heightSize - 1;
    int res = 0;

    while (left < right) {
        int cur_area = min(height[left], height[right]) * (right - left);
        res = max(res, cur_area);

        if (height[left] < height[right]) {
            left++;
        } else {
            right--;
        }
    }
    return res;
}
// 双指针技巧,移动较低的一边
if (height[left] < height[right]) {
    left++;
} else {
    right--;
}

其实也好理解,因为矩形的高度是由 min(height[left], height[right]) 即较低的一边决定的

你如果移动较低的那一边,那条边可能会变高,使得矩形的高度变大,进而就「有可能」使得矩形的面积变大;相反,如果你去移动较高的那一边,矩形的高度是无论如何都不会变大的,所以不可能使矩形的面积变得更大。

详细题解:如何高效解决接雨水问题

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务