LeetCode 496.下一个更大元素I
自己写的,暴力寻找
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) {
unordered_set<int> f;
unordered_map<int,int> m;
vector<int> ans;
for(auto num:findNums)
f.insert(num);
for(int i=0;i<nums.size();++i)
{
if(f.find(nums[i])!=f.end())
{
for(int j=i+1;j<nums.size();++j)
if(nums[j]>nums[i])
{
m[nums[i]]=nums[j];
break;
}
if(m.find(nums[i])==m.end())
m[nums[i]]=-1;
}
}
for(auto num:findNums)
ans.push_back(m[num]);
return ans;
}
};
递增栈
看大佬的思路,还是用栈,自己改了改,这种比较大小,都可以用栈,倒着输有奇效,虽然时间没咋快(滑稽)
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) {
stack<int> s;
vector<int> ans;
unordered_map<int,int> m;
if(findNums.size()==0)
return ans;
for(int i=nums.size()-1;i>=0;--i)
{
while(!s.empty()&&nums[s.top()]<nums[i])
{
m[nums[i]]=-1;
s.pop();
}
if(!s.empty()&&nums[s.top()]>nums[i])
m[nums[i]]=nums[s.top()];
s.push(i);
}
m[nums.back()]=-1;
for(auto num:findNums)
ans.push_back(m[num]);
return ans;
}
};