版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/majichen95/article/details/82905552
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.
注意事项
1.All elements in nums1
and nums2
are unique.
2.The length of both nums1
and nums2
would not exceed 1000.
解题思路:
将nums2数组中元素即对应的下标放入map中,方便后续查找。然后依次遍历即可。
public class Solution {
/**
* @param nums1: an array
* @param nums2: an array
* @return: find all the next greater numbers for nums1's elements in the corresponding places of nums2
*/
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
// Write your code here
int[] res = new int[nums1.length];
Map<Integer,Integer> map = new HashMap<>();
for(int i=0 ; i<nums2.length ; i++)
map.put(nums2[i],i);
for(int i=0 ; i<nums1.length ; i++){
res[i] = -1;
for(int nextIndex = map.get(nums1[i])+1 ; nextIndex<nums2.length ; nextIndex++){
if(nums2[nextIndex] > nums1[i]){
res[i]=nums2[nextIndex];
break;
}
}
}
return res;
}
}