# Brute Force# Greedy

c907 - 尋找最大矩形

🔗 前往 ZeroJudge 原題

題目描述

題目要求找出一個由 N 個長條圖構成的高度序列中,可以形成的最大矩形面積。每個長條圖的寬度為 1,高度由輸入的 N 個數字決定。

解題思路

此程式碼採用暴力法 (Brute Force) 的方式來解決問題。對於每個高度 a[i],程式碼嘗試向左右兩側擴展矩形,直到遇到高度小於 a[i] 的長條圖。擴展的過程中,矩形的面積會不斷累加。最後,程式碼會比較所有可能的矩形面積,並輸出最大值。

具體來說,對於每個 a[i],程式碼會分別向右和向左擴展,計算以 a[i] 為最低高度的最大矩形面積。向右擴展時,只要遇到的高度大於等於 a[i],就將 a[i] 加到總面積中。向左擴展的邏輯相同。

複雜度分析

  • 時間複雜度: O(n^2)
  • 空間複雜度: O(n)

程式碼

#include <iostream>
using namespace std;
int main(){
	int n,ans=0;
	cin >> n;
	int a[n];
	for(int i=0;i<n;++i)
		cin >> a[i];
	for(int i=0;i<n;++i){
		int tmp=0;
		for(int ii=i;ii<n;++ii){
			if(a[ii]>=a[i])
				tmp+=a[i];
			else
				break;
		}
		for(int ii=i-1;ii>=0;--ii){
			if(a[ii]>=a[i])
				tmp+=a[i];
			else
				break;
		}
		ans=max(ans,tmp);
	}
	cout << ans;
}

Discussion