C语言算法-解答盛最多水的容器问题的C语言实现
            
            题目
给定一个非负整数数组 height,每个元素表示一个点的高度,找出两个点与 x 轴构成的容器,使容器能够容纳最多的水。
引言
盛最多水的容器问题是一个经典的问题,它可以通过计算两个指针所形成的容器的容量来求解。解决这个问题需要考虑容器的宽度和高度,并通过双指针的移动来逐步缩小宽度。
算法思路
我们将使用一种双指针的方法来解决盛最多水的容器问题。
算法的步骤如下:
- 初始化两个指针,分别指向数组的起始位置和结束位置。
 - 初始化变量 
maxArea为 0,用于存储最大的容器容量。 循环执行以下步骤,直到两个指针相遇:
- 计算当前容器的容量,即两个指针之间的距离乘以较短的线段的高度。
 - 如果当前容器的容量大于 
maxArea,则更新maxArea。 - 移动较短线段所在的指针,即将其向较长线段的方向移动一步。
 
- 返回 
maxArea,即最大的容器容量。 
代码实现
下面是使用C语言实现的代码:
#include <stdio.h>
int maxArea(int* height, int heightSize) {
    int left = 0;
    int right = heightSize - 1;
    int maxArea = 0;
    while (left < right) {
        int currArea = (right - left) * (height[left] < height[right] ? height[left] : height[right]);
        if (currArea > maxArea) {
            maxArea = currArea;
        }
        if (height[left] < height[right]) {
            left++;
        } else {
            right--;
        }
    }
    return maxArea;
}
int main() {
    int height[] = {1, 8, 6, 2, 5, 4, 8, 3, 7};
    int heightSize = sizeof(height) / sizeof(height[0]);
    int result = maxArea(height, heightSize);
    printf("Max Area: %d\n", result);
    return 0;
}算法分析
该算法的时间复杂度为 O(n),其中 n 是数组的长度。在每一次循环中,我们移动了两个指针中的一个,直到两个指针相遇。
空间复杂度为 O(1),算法只使用了常数级别的额外空间。
示例和测试
示例输入1:
height = [1, 8, 6, 2, 5, 4, 8, 3, 7]示例输出1:
Max Area: 49示例输入2:
height = [1, 1]示例输出2:
Max Area: 1示例输入3:
height = [4, 3, 2, 1, 4]示例输出3:
Max Area: 16示例输入4:
height = [1, 2, 1]示例输出4:
Max Area: 2总结
本文使用C语言实现了解答盛最多水的容器问题的代码。通过使用双指针逐步缩小容器的宽度,我们能够找到最大的容器容量。该算法的时间复杂度为 O(n),空间复杂度为 O(1)。