题目:
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.
Example 1:
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.
Example 2:
Input: nums1 = [2,4], nums2 = [1,2,3,4]. Output: [3,-1] Explanation: For number 2 in the first array, the next greater number for it in the second array is 3. For number 4 in the first array, there is no next greater number for it in the second array, so output -1.
Note:
- All elements in
nums1
andnums2
are unique. - The length of both
nums1
andnums2
would not exceed 1000.
翻译:
你被给定两个数组(无重复) nums1
和 nums2
,其中 nums1
的元素是 nums2
的子集。找到 nums1
中所有元素在 nums2
里对应对应位置的下一个更大的数。
nums1
里的数 x 的下一个更大的数是它在 nums2
里右边第一个更大的数。如果它不存在,对于这个数输出-1。
例子 1:
输入: nums1 = [4,1,2], nums2 = [1,3,4,2]. 输出: [-1,3,-1] 解释: 对于第一个数组中的的数字4,你找不到它在第二个数组中的下一个更大的数,因此输出-1。 对于第一个数组中的数字1,它在第二个数组中的下一个更大的数为3。 对于第一个数组中的数字2,它在第二个数组中没有下一个更大的数,因此输出-1。
例子 2:
输入: nums1 = [2,4], nums2 = [1,2,3,4]. 输出: [3,-1] 解释: 对于第一个数组中的数字2,它在第二个数组中的下一个更大的数是3。 对于第一个数组中的数字4,它在第二个数组中没有下一个更大的数,因此返回-1。
注意:
- 所有
nums1
和nums2
中的元素都是唯一的。 nums1
和nums2
的长度不能超过1000。
思路:
理解题意是关键,题目并不难,先找到nums1对应在nums2中的位置,然后判断它右边的数字是否满足Next Greater。
C++代码(Visual Studio 2017):
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int search(vector<int>& nums, int m) {
int i = 0;
for (i = 0; i < nums.size(); i++) {
if (nums[i] == m)
break;
}
if (i == nums.size() - 1||i==nums.size())
return -1;
for (; i < nums.size(); i++) {
if (m < nums[i])
return nums[i];
}
return -1;
}
vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) {
vector<int> res(findNums.size());
for (int i = 0; i < findNums.size(); i++) {
res[i] = search(nums, findNums[i]);
}
return res;
}
};
int main()
{
Solution s;
vector<int> findNums = { 4,1,2 };
vector<int> nums = { 1,3,4,2 };
vector<int> result;
result = s.nextGreaterElement(findNums, nums);
for (int i = 0; i < result.size(); i++) {
cout << result[i] << " ";
}
return 0;
}