LeetCode Online Judge 제목 C# 연습 - Largest Rectangle in Histogram
8064 단어 LeetCode
For example,Given height = [2,1,5,6,2,3],return 10.
1 public static int LargestRectangleinHistogramOpt(List<int> height)
2 {
3 if (height.Count == 0)
4 return 0;
5 if (height.Count == 1)
6 return height[0];
7
8 int[] Base = new int[height.Count];
9 Stack<int> s = new Stack<int>();
10 int MaxArea = 0;
11
12 //Calculate the base from left to right
13 for (int i = 0; i < height.Count; i++)
14 {
15 while(s.Count > 0 && height[i] < height[s.Peek()])
16 {
17 Base[s.Peek()] = i - s.Peek();
18 s.Pop();
19 }
20
21 s.Push(i);
22 }
23 while (s.Count > 0)
24 {
25 Base[s.Peek()] = height.Count - s.Peek();
26 s.Pop();
27 }
28
29 //Add base from right to left
30 for (int i = height.Count - 1; i >= 0; i--)
31 {
32 while (s.Count > 0 && height[i] < height[s.Peek()])
33 {
34 Base[s.Peek()] += s.Peek() - i - 1;
35 s.Pop();
36 }
37
38 s.Push(i);
39 }
40 while (s.Count > 0)
41 {
42 Base[s.Peek()] += s.Peek();
43 s.Pop();
44 }
45
46 //Find the MaxArea
47 for (int i = 0; i < height.Count; i++)
48 {
49 MaxArea = Math.Max(MaxArea, Base[i] * height[i]);
50 }
51
52 return MaxArea;
53
54 }
코드 분석:
위 코드의 시간 복잡도는 O(n)입니다.좀 이상적인 방법일 거예요.
1. 왼쪽에서 오른쪽으로 대응하는 높이의 오른쪽 밑바닥의 길이를 계산하다.
2. 오른쪽에서 왼쪽으로 대응하는 높이 왼쪽 땅의 길이를 더해라.
3. 밑바닥을 통과하다×높음, 최대 면적 계산
펴기 1.
Stack 도움말을 사용하여 계산합니다.
예를 들어 [2,1,5,6,2,3]
Base[0,0,0,0,0,0] Stack[ )
1.i = 0 Base[0,0,0,0,0,0] Stack[0,)
2.i = 1 하향, Base[1,0,0,0,0,0,0] Stack[0,1,)
3.i = 2 상승연, Base[1,0,0,0,0,0,0] Stack[1,2)
4.i = 3 상승연, Base[1,0,0,0,0,0,0] Stack[1,2,3)
5.i = 4 하강연, Base[1,0,2,1,0,0] Satck[1,2,3,4)
6.i = 5 상승연, Base[1,0,2,1,0,0] Stack[1,4,5)
7.베이스[1,5,2,1,2,1]Stack[1,4,5)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)이 문제의 공식 난이도는 Medium으로 좋아요 1296, 반대 505, 통과율 35.4%를 눌렀다.각 항목의 지표로 말하자면 보기에는 약간 규범에 맞는 것 같지만, 실제로도 확실히 그렇다.이 문제의 해법과 의도는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.