84. Largest Rectangle in Histogram 直方图中最大的矩形

  1. 题目不难,但是想要提高运算效率需要深思熟虑

  2. 目前的复杂度比较高。

  3. #include
    using namespace std;
    int LargestRectangleInHistogram(int intarr[], int length)
    {
    int maxt = 0;
    for (int i = 0; i < length; i++)
    {
    if (i == 0)
    {
    int j;
    for (j = 1; j < length; j++)
    {
    if (intarr[j] < intarr[i])
    {
    break;
    }
    }
    if (j >= length - 1)
    {
    j = length - 1;
    }
    int tempsum = (j - 1) * intarr[i];
    if ((tempsum+intarr[i]) > maxt)
    {
    maxt = tempsum + intarr[i];
    }
    }
    else if (i == length - 1)
    {
    int j;
    for (j = length-2; j >= 0; j–)
    {
    if (intarr[j] < intarr[i])
    {
    break;
    }
    }
    if (j < 0)
    {
    j = 0;
    }
    int tempsum = (length - 2 -j) * intarr[i];
    if ((tempsum+intarr[i]) > maxt)
    {
    maxt = tempsum + intarr[i];
    }
    }
    else
    {
    int j;
    int tempsum1 = 0;
    int tempsum = 0;
    for (j = i-1; j>=0; j–)
    {
    if (intarr[j] < intarr[i])
    {
    break;
    }
    }
    if (j < 0)
    {
    j = 0;
    }
    tempsum1 = ((i-1)-j) * intarr[i];
    if (tempsum1 < 0)
    {
    tempsum1 = 0;
    }

    	for (j = i+1; j = length - 1)
    	{
    		j = length - 1;
    	}
    	tempsum = (j-(i+1)) * intarr[i];
    	if (tempsum < 0)
    	{
    		tempsum = 0;
    	}
    	if ((tempsum+tempsum1+intarr[i]) > maxt)
    	{
    		maxt = tempsum + tempsum1+ intarr[i];
    	}
    }
    

    }
    return maxt;
    }
    int main()
    {
    int intarr[6] = { 2,1,5,6,2,3 };
    cout << LargestRectangleInHistogram(intarr, 6) << endl;
    system(“pause”);
    return 0;
    }
    网上给出的算法。利用局部峰值的办法。来处理的。减少了每个点都要两边循环的计算步骤,加快了运算效率。
    int LargestRectangleInHistogramT(int intarr[], int length)
    {
    int res = 0;
    for (int i = 0; i < length; i++)
    {
    if (i + 1 < length && intarr[i] <= intarr[i + 1])
    {
    continue;
    }
    int minh = intarr[i];
    for (int j = i; j >= 0; j–)
    {
    minh = minT(minh, intarr[j]);
    int area = (i - j + 1)*minh;
    res = maxT(area, res);
    }
    }
    return res;
    }

你可能感兴趣的:(C++)