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 182182- [ day 57] ( ./day57.md )
183183 - [ 647. 回文子串] ( ./day56/lc647.md )
184184 - [ 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 )
185193- [ 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