-
今日学习的文章链接,或者视频链接
-
自己看到题目的第一想法
-
看完代码随想录之后的想法
503
解法一:拼接
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
// 拼接一个新的nums
vector<int> nums1(nums.begin(), nums.end());
nums.insert(nums.end(), nums1.begin(), nums1.end());
int n = nums.size();
vector<int> result(n,-1);
if(n == 0){
return result;
}
stack<int> stk;
stk.push(0);
for(int i = 1;i<n;i++){
while(!stk.empty()&&nums[i]>nums[stk.top()]){
result[stk.top()] = nums[i];
stk.pop();
}
stk.push(i);
}
// 最后再把结果集即result数组resize到原数组大小
result.resize(n / 2);
return result;
}
};
解法二:取模
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
int n = nums.size();
vector<int> result(n,-1);
if(n==0) return result;
stack<int> stk;
stk.push(0);
for(int i = 1;i<n*2;i++){
while(!stk.empty() && nums[i%n]>nums[stk.top()]){
result[stk.top()] = nums[i%n];
stk.pop();
}
stk.push(i%n);
}
return result;
}
};
42
class Solution {
public:
int trap(vector<int>& height) {
int n = height.size();
int sum = 0;
if(n==0) return sum;
stack<int> stk;
stk.push(0);
for(int i = 1;i < n;i++){
while(!stk.empty() && height[i]>height[stk.top()]){
int mid = stk.top();
stk.pop();
if(!stk.empty()){
int left = stk.top();
int h = min(height[left],height[i])-height[mid];
int w = i - left - 1;
sum += h*w;
}
}
stk.push(i);
}
return sum;
}
};
-
自己实现过程中遇到哪些困难
-
今日收获,记录一下自己的学习时长