면적 이 가장 큰 사각형 (단조 창고 문제)

제목: N 개의 사각형 이 있 고 너 비 는 모두 1 이 며 N 개의 사각형 의 높이 를 제시 합 니 다. 이 N 개의 사각형 으로 구 성 된 도형 에 포 함 된 가장 큰 사각형 면적 을 구 합 니 다.
분석: 모든 사각형 에 대해 우 리 는 그것 이 왼쪽 에서 오른쪽으로 각각 연장 할 수 있 는 길 이 를 구 한 다음 에 그것 의 높이 를 곱 한다. 이것 이 바로 현재 사각형 을 최저 높이 로 하면 얻 을 수 있 는 가장 큰 면적 이다.
입력 데이터 input 에 대해 서 는 각각 input [i]
1. 스 택 이 비어 있 거나 input [i] 가 input [st. top] 보다 크 면 스 택 에 들 어 갑 니 다. 그렇지 않 으 면 스 택 에 들 어 가 는 요소 보다 큰 스 택 요소 가 스 택 에서 나 옵 니 다. 스 택 이 비어 있 거나 input [i] 보다 작은 요 소 를 만 날 때 까지.
2. 각각 st. top 에서 i 사이 의 요 소 는 모두 input [st. top] 보다 크 고 모든 스 택 의 st. top 에 대해 (i - top) * input [top] 을 구 합 니 다. 즉, 모든 st. top 위치의 사각형 이 오른쪽으로 연장 할 수 있 는 최대 면적 (왼쪽 이 그것 보다 작 습 니 다) 입 니 다.
3. 마지막 스 택 의 스 택 상단 요소 에 대해 [st. top, i] 간 의 요 소 는 모두 input [i] 보다 크기 때문에 input [top] = input [i], st. push (top), 즉 input [i] 에 대해 왼쪽으로 최대 top 까지 연장 할 수 있 기 때문에 top 을 다시 스 택 에 들 어가 top 위치의 값 을 바 꿔 야 합 니 다.
import java.util.Stack;

public class Main {

	public static void main(String[] arg) {
		int [] input=new int[] {7,2,1,4,5,1,3,3,-1};
		
		Stack st =new Stack();
		
		long max=0;
		long temp=0;
		int top=0;
		int len=input.length;
		for(int i=0;i=input[st.peek()]) {
				st.push(i);
			}else {
				while(!st.isEmpty() && input[i]

좋은 웹페이지 즐겨찾기