计算盛最多水,则需要以小的为基准来统计,我们要定义一个头 一个尾然后计算它们的最小值然后最小值的那个下标移动看代码
我们需要定义两个变量计算宽和高
在统计最大值
看完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include<stdio.h>
#include <string.h>
#include<stdlib.h>
//输入:[1, 8, 6, 2, 5, 4, 8, 3, 7]
//输出:49
//解释:图中垂直线代表输入数组[1, 8, 6, 2, 5, 4, 8, 3, 7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
//示例 2:
//输入:height = [1, 1]
//输出:1
int maxArea(int* height, int heightSize) {
int start = 0;
int end = heightSize - 1;
int Max = 0, h = 0, d = 0;
while (start < end)
{
d = end - start;//宽
if (height[start] <= height[end])//计算最小的高
h = height[start];
else
h = height[end];
if (d * h > Max)//计算最大值
Max = d * h;
if (height[start] > height[end])//只需要移动最小值的下标
end--;
else
start++;
}
return Max;
}
int main()
{
int arr[] = { 1, 8, 6, 2, 5, 4, 8, 3, 7 };
int size = sizeof(arr) / sizeof(arr[0]);
int max = maxArea(arr, size);
printf("%d\n", max);
return 0;
}