히스토그램 [栈] 84 leetcode 큰 직사각형

문제 : https://leetcode.com/problems/largest-rectangle-in-histogram

        클래식 단조로운 스택 항목을 참조하십시오. 스택은 시간의 현재 수보다 작은 것으로 발견 될 때 유지 단조 후 상단 요소는이 큰, 그 스택의 현재 최상위을 계산할 수있다 (스택 내의 다음 요소보다 큰, 또한 현재의 요소보다 큰 경우)이고, 스택 증대 높은 직사각형 영역 및 비교는 큰되지 않습니다.

클래스 해결 {
 공개 :
     INT largestRectangleArea (벡터 < INT > 및 높이) { 
        heights.push_back ( 0 );
        INT N = heights.size (); 
        스택 < INT > STA;
        INT 입술 = 0 ; 
        
        위한 ( int로 I = 0 ; I <N은, 내가 ++ ) 
        { 
            동안 (! sta.empty () && 높이 [I] <= 높이 [sta.top ()]) 
            { 
                INT의 H = 높이 [sta.top ()] ;
                () sta.pop; 
                INT왼쪽 sta.empty = ()? - 1 : sta.top ();
                INT S = H *를 (전 - 좌측 - 1 ); 
                입술 = 최대 (입술, S); 
                
            } 
     // COUT << 입술 << "  " ; 
            sta.push (I); 
        } 
        반환 입술을; 
    } 
};

 

추천

출처www.cnblogs.com/fish1996/p/11335097.html