6.Next Greater Element I
You are given two arrays (without duplicates) nums1
and nums2
where nums1
’s elements are subset of nums2
. Find all the next greater numbers for nums1
's elements in the corresponding places of nums2
.
The Next Greater Number of a number x in nums1
is the first greater number to its right in nums2
. If it does not exist, output -1 for this number.
Input: nums1 = [4,1,2], nums2 = [1,3,4,2].
Output: [-1,3,-1]
Explanation:
For number 4 in the first array, you cannot find the next greater number for it in the second array, so output -1.
For number 1 in the first array, the next greater number for it in the second array is 3.
For number 2 in the first array, there is no next greater number for it in the second array, so output -1.
Solution : (Using Stack)
class Solution
{
public:
vector<int> nextGreaterElement(vector<int> &nums1, vector<int> &nums2)
{
vector<int> v;
if (nums1.size() == 0 || nums2.size() == 0)
{
return v;
}
unordered_map<int, int> m;
stack<int> s;
s.push(nums2[0]);
for (int i = 1; i < nums2.size(); i++)
{
while (!s.empty() && s.top() < nums2[i])
{
int x = s.top();
m.insert({x, nums2[i]});
s.pop();
}
s.push(nums2[i]);
}
for (int i = 0; i < nums1.size(); i++)
{
if (m[nums1[i]] != 0)
{
v.push_back(m[nums1[i]]);
}
else
{
v.push_back(-1);
}
}
return v;
}
};
Time Complexity: O(N)
Last updated
Was this helpful?