给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。
nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。
示例 1:
输入: nums1 = [4,1,2], nums2 = [1,3,4,2].
输出: [-1,3,-1]
解释:
对于num1中的数字4,你无法在第二个数组中找到下一个更大的数字,因此输出 -1。
对于num1中的数字1,第二个数组中数字1右边的下一个较大数字是 3。
对于num1中的数字2,第二个数组中没有下一个更大的数字,因此输出 -1。
示例 2:
输入: nums1 = [2,4], nums2 = [1,2,3,4].
输出: [3,-1]
解释:
对于num1中的数字2,第二个数组中的下一个较大数字是3。
对于num1中的数字4,第二个数组中没有下一个更大的数字,因此输出 -1。
注意:
nums1和nums2中所有元素是唯一的。
nums1和nums2 的数组大小都不超过1000。
思路:首先每次从nums1中取出一个元素记为i,然后在nums2里面逐个对比,要保证nums2里既有元素j1和i相等,还要保证j1后面还有个j2比i大,所以设置一个flag标志位,满足第一天flag标记为1,这个时候才能进行第二条判断,满足第二条则flag记为2,并把j2记录下来,否则就记录-1
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution
{
public:
vector<int> nextGreaterElement(vector<int>& nums1,vector<int>& nums2)
{
vector<int> n3;
for(auto i:nums1)
{
int flag = 0;
for(auto j:nums2)
{
if(i == j)
{
flag = 1;
}
if(j>i && flag == 1)
{
n3.push_back(j);
flag = 2;
break;
}
}
if(flag != 2)
{
n3.push_back(-1);
flag = 0;
}
}
return n3;
}
};
int main()
{
Solution s;
vector<int>nums1,nums2,n3;
nums1.push_back(4);
nums1.push_back(1);
nums1.push_back(2);
nums2.push_back(1);
nums2.push_back(3);
nums2.push_back(4);
nums2.push_back(2);
n3 = s.nextGreaterElement(nums1,nums2);
for(auto c:n3)
{
cout<<c<<" ";
}
return 0;
}