You are given two arrays (without duplicates)
nums1
andnums2
wherenums1
’s elements are subset ofnums2
. Find all the next greater numbers fornums1
's elements in the corresponding places ofnums2
.The Next Greater Number of a number x in
nums1
is the first greater number to its right innums2
. 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.
1.暴力
1 public class Solution { 2 public int[] nextGreaterElement(int[] findNums, int[] nums) { 3 int len = findNums.length; 4 int[] res = new int[len]; 5 if(len > nums.length) { 6 return res; 7 } 8 for(int i=0; ifindNums[i]) {17 res[i] = nums[j];18 k = true;19 break;20 }21 }22 if(k == false) {23 res[i] = -1;24 }25 }26 return res;27 }28 }
2.集合
1 public int[] nextGreaterElement(int[] findNums, int[] nums) { 2 Mapmap = new HashMap<>(); // map from x to next greater element of x 3 Stack stack = new Stack<>(); 4 for (int num : nums) { 5 while (!stack.isEmpty() && stack.peek() < num) 6 map.put(stack.pop(), num); 7 stack.push(num); 8 } 9 for (int i = 0; i < findNums.length; i++)10 findNums[i] = map.getOrDefault(findNums[i], -1);11 return findNums;12 }