題目如圖,這一型別的題目很容易讓人聯想到線段樹,雖然我了解一點,然而還並不會…於是without any tools,我開始從零摸索這個題目。矩形的目標很容易讓我們從邊界的角度思考問題,我們會試圖找到這個最大面積矩形的兩端,然而這樣的話問題變的困難,因為你要同時考慮距離和高度兩個因素。
於是發現了問題的所在,我們就解決這一問題。如果我們固定高度呢?問題一下子就明晰了。於是,我以每個bar的高度做高,再來找最大面積的矩形,便只要找到它兩邊分別距它最遠且比它高的bar即可。
剩下的問題變成如何找到每個bar兩邊距它最遠且比它高的bar。我們用兩個陣列left[i],right[i]來記錄這兩個值。具體實現我們看**。
int max(int a,int b) //求解最大值。
if(heightssize == 0) return 0; //如果為空,則返回0.
int* leftmax = (int*)malloc(sizeof(int)*heightssize);
int* rightmax = (int*)malloc(sizeof(int)*heightssize);
leftmax[0] = -1;
rightmax[heightssize-1] = heightssize;
int i, p; //建立過程。
for(i = 1;i < heightssize;i++)
for(i = heightssize -2;i >= 0;i--)
int maxarea = 0;
for(i = 0;i < heightssize;i++) maxarea = max(maxarea,heights[i]*(rightmax[i]- leftmax[i] - 1)); //以每個bar的高度為高,求出最大矩形面積,再求出其中最大值。
在這之後,我又碰到了剛剛那個題的加強版,從一維公升級成了二維。那麼我們一樣的思想,控制一維,變成一維問題思考,再把一維中的矩形中最大矩形的面積返回即可。具體的,我們可以分別以每一行為x軸,將問題轉化為上面的問題,即如果某行中某點為0,我們就讓它的高度為0,如果為1,我們計算他上方連續的1的個數便是他的高度,利用上乙個題,便可以求出以這一行作為x軸,在其上方所能獲得的最大矩形了。
if(matrixrowsize == 0) return 0;
int row = matrixrowsize, col =matrixcolsizes;
int heights[row][col];
int i, j; //建立
for(i = 0; i < col;i++)
for(i = 1; i
}計算每乙個點作為x軸上點時,它所代表的高度。
int maxrectangle = 0;
for(i = 0; i < row;i++) maxrectangle = max(maxrectangle,largestrectanglearea(heights[i], col));
return maxrectangle;
控制理論 滑模變結構控制
1 滑模變結構控制簡介 總之,抖振產生的原因在於 當系統的軌跡到達切換麵時,其速度是有限大,慣性使運動點穿越切換面,從而最終形成抖振,疊加在理想的滑動模態上。對於實際的計算機取樣系統而言,計算機的高速邏輯轉換及高精度的數值運算使得切換開關本身的時間及空間滯後影響幾乎不存在 因此,開關的切換動作所造成...
ros滑模控制 滑模變結構控制演算法綜述
龍源期刊網 滑模變結構控制演算法綜述 萬彥輝李淑英年第期 滑模變結構控制是一種自動控制系統的一種設計方法,可用於連續或離散系統 線性或非 線性系統 確定性或非確定性系統 集中引數或分布引數系統和集中控制或分散控制等。這種 控制方法通過讓控制量不斷地切換,使系統狀態進入預先設定的滑模面滑動,故而在遇到...
環保光能發電 遠端控制逆變
wiznet產品應用小例17 遠端光能發電系統 逆變器的核心是逆變電路 直流變交流 太陽能電池提供的光能供電一般是直流電,如何將它轉換為應用更廣的交流電呢?看看wiznet在裡面扮演的角色吧,通過wiznet網路晶元將換流器中的實時資料連線至網路,人們在網路遠端實現對其遠端監控和調控,設定最合理的電...