Leetcode 84 85, 最大矩形問題的暴力枚舉方法

 

暴力法:枚舉所有的矩形,時間複雜度O(n^3)

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        // 暴力方法:枚舉矩形的所有左右端點,時間複雜度是O(N^3)
        int res = 0;
        for(int i=0;i<heights.size();i++){
            for(int j=i;j<heights.size();j++){
                int height = heights[i];
                for(int k=i;k<=j;k++){
                    height = min(height,heights[k]);
                }
                res = max(res,(j-i+1)*height);
            }
        }
        return res;
    }
};

這個算法很容易優化到O(n^2)

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        // 暴力方法:枚舉矩形的所有左右端點,時間複雜度是O(N^3)
        int res = 0;
        for(int i=0;i<heights.size();i++){
            int height = heights[i];
            for(int j=i;j<heights.size();j++){
                height = min(height,heights[j]);
                res = max(res,(j-i+1)*height);
            }
        }
        return res;
    }
};

還是超時,所以我們需要一個O(N)的算法:即一次遍歷:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章