题目要求:给定一组数组,每个元素为非负数,每个元素的数值为高,下标为底,求能形成的最大矩形面积
实现思路:面积为底*高,底则为下标差-1,关键在求高——将每个元素历遍用for循环,分别找每个元素往前或往后的比它小的值,此时往后的-1项,往前的+1项即为可围成最大矩形的边界
注意事项:1,底的计算时注意边界问题,非数组边界要-1,含边界不用减
2,下标到底时由于跳出循环会多出,需要让其-1
具体代码:
void max_v(int x[], int y)
{
int i, j, k;
int max = 0;
int count = 0;
for (i = 0; i < y; i++)//对数组赋值
{
scanf("%d", &x[i]);
}
for (i = 0; i < y; i++)//历遍每个元素
{
for (j = i; j < y; j++)//向后找小的元素
{
if (x[j] < x[i])//一找到小的就跳出
{
break;
}
}
if (j == y)//若到边界记得-1
{
j--;
}
for (k = i; k >0; k--)//向前找小的元素
{
if (x[k] < x[i])//一找到小的就跳出
{
break;
}
}
if (j == 0 || k == 0)//若含有边界底不用-1
{
if ((j - k) * x[i] > max)
{
max = (j - k) * x[i];
}
}
else
{
if ((j - k-1) * x[i] > max)//若无边界底需要-1
{
max = (j - k-1) * x[i];
}
}
}
printf("%d\n", max);
}
int main()
{
int height[2] = { 0 };
int num = sizeof(height) / sizeof(height[0]);
max_v(height, num);//传参,传数组时记得传数组长度
return 0;
}