File tree Expand file tree Collapse file tree 9 files changed +144
-0
lines changed Expand file tree Collapse file tree 9 files changed +144
-0
lines changed Original file line number Diff line number Diff line change 182
182
- [ day 57] ( ./day57.md )
183
183
- [ 647. 回文子串] ( ./day56/lc647.md )
184
184
- [ 516.最长回文子序列] ( ./day56/lc516.md )
185
+ - [ day 58] ( ./day58.md )
186
+ - [ 739. 每日温度] ( ./day58/lc739.md )
187
+ - [ 496.下一个更大元素 I] ( ./day58/lc496.md )
188
+ - [ day 59] ( ./day59.md )
189
+ - [ 503. 下一个更大元素II] ( ./day58/lc503.md )
190
+ - [ 42. 接雨水] ( ./day58/lc42.md )
191
+ - [ day 60] ( ./day60.md )
192
+ - [ 84. 柱状图中最大的矩形] ( ./day58/lc84.md )
185
193
- [ remains] ( ./remains.md )
Original file line number Diff line number Diff line change
1
+ # 42. 接雨水
2
+
3
+ 需要考虑前两个
4
+
5
+ ``` cpp
6
+ class Solution {
7
+ public:
8
+ int trap(vector<int >& v) {
9
+ int res = 0;
10
+ vector<int >s;
11
+ for(int i=0;i<v.size();i++){
12
+ while(!s.empty()&&v[ s.back()] <=v[ i] ){
13
+ int idx = s.back();
14
+ s.pop_back();
15
+ if(!s.empty()){
16
+ int left = s.back();
17
+ int width = i - left - 1;
18
+ int height = min(v[ left] ,v[ i] ) - v[ idx] ;
19
+ res += width * height;
20
+ }
21
+ }
22
+ s.push_back(i);
23
+ }
24
+ return res;
25
+ }
26
+ };
27
+ ```
Original file line number Diff line number Diff line change
1
+ # 496. 下一个更大元素 I
2
+
3
+ 从代码来看,v1的作用就是用来映射一次,增加了一层映射
4
+
5
+ ``` cpp
6
+ class Solution {
7
+ public:
8
+ vector<int > nextGreaterElement(vector<int >&v1,vector<int >&v2) {
9
+ vector<int >res(v1.size(),-1);
10
+ unordered_map<int, int> m; // key:下标元素,value:下标
11
+ for (int i = 0; i < v1.size(); i++) {
12
+ m[ v1[ i]] = i;
13
+ }
14
+ vector<int >s;
15
+ for(int i=0;i<v2.size();i++){
16
+ while(!s.empty()&&v2[ s.back()] <v2[ i] ){
17
+ int idx = s.back();
18
+ s.pop_back();
19
+ if (m.find(v2[ idx] )!=m.end()){
20
+ res[ m[ v2[ idx]]] =v2[ i] ;
21
+ }
22
+ }
23
+ s.push_back(i);
24
+ }
25
+ return res;
26
+ }
27
+ };
28
+ ```
Original file line number Diff line number Diff line change
1
+ # 503.下一个更大元素II
2
+
3
+ ``` cpp
4
+ class Solution {
5
+ public:
6
+ vector<int > nextGreaterElements(vector<int >& v) {
7
+ vector<int >res(v.size(),-1);
8
+ vector<int >s;
9
+ int n = v.size();
10
+ for(int i=0;i<n* 2;i++){
11
+ while(!s.empty()&&v[ s.back()] <v[ i%n] ){
12
+ int idx = s.back();
13
+ s.pop_back();
14
+ res[ idx] =v[ i%n] ;
15
+ }
16
+ s.push_back(i%n);
17
+ }
18
+ return res;
19
+ }
20
+ };
21
+ ```
Original file line number Diff line number Diff line change
1
+ # 739. 每日温度
2
+
3
+ ``` cpp
4
+ class Solution {
5
+ public:
6
+ vector<int > dailyTemperatures(vector<int >& v) {
7
+ vector<int >res(v.size(),0);
8
+ // 1
9
+ // 1 1
10
+ // 1 1 1
11
+ vector<int >s;
12
+ for(int i=0;i<v.size();i++){
13
+ while(!s.empty()&&v[ s.back()] <v[ i] )
14
+ {
15
+ int idx=s.back();
16
+ s.pop_back();
17
+ res[ idx] =i-idx;
18
+ }
19
+ s.push_back(i);
20
+ }
21
+ return res;
22
+ }
23
+ };
24
+ ```
Original file line number Diff line number Diff line change
1
+ # 84.柱状图中最大的矩形
2
+
3
+ ``` cpp
4
+ class Solution {
5
+ public:
6
+ int largestRectangleArea(vector<int >& v) {
7
+ int res = 0;
8
+ vector<int >rightfirstsmallerthanmine(v.size(),v.size());
9
+ vector<int >leftffirstsmallerthanmine(v.size(),-1);
10
+ vector<int >s;
11
+ for(int i=0;i<v.size();i++){
12
+ while(!s.empty()&&v[ s.back()] >v[ i] ){
13
+ int idx = s.back();
14
+ s.pop_back();
15
+ rightfirstsmallerthanmine[ idx] =i;
16
+ }
17
+ s.push_back(i);
18
+ }
19
+ s.clear();
20
+ for(int i=v.size()-1;i>=0;i--){
21
+ while(!s.empty()&&v[ s.back()] >v[ i] ){
22
+ int idx = s.back();
23
+ s.pop_back();
24
+ leftffirstsmallerthanmine[ idx] =i;
25
+ }
26
+ s.push_back(i);
27
+ }
28
+ for(int i=0;i<v.size();i++){
29
+ int width = rightfirstsmallerthanmine[ i] - leftffirstsmallerthanmine[ i] -1;
30
+ int height = v[ i] ;
31
+ res = max(res, width* height);
32
+ }
33
+ return res;
34
+ }
35
+ };
36
+ ```
You can’t perform that action at this time.
0 commit comments