一、暴力破解

  1. /**
  2. * @param {number[]} nums1
  3. * @param {number[]} nums2
  4. * @return {number[]}
  5. */
  6. var nextGreaterElement = function(nums1, nums2) {
  7. const m1 = nums1.length, m2 = nums2.length
  8. const resArr = Array(m1).fill(-1)
  9. for(let i = 0; i < m1; i++) {
  10. const cur = nums1[i]
  11. const index = nums2.findIndex((num) => num === cur)
  12. for(let j = index + 1; j < m2; j++) {
  13. if(nums2[j] > cur) {
  14. resArr[i] = nums2[j]
  15. break
  16. }
  17. }
  18. }
  19. return resArr
  20. };

二、栈+hash表

  1. /**
  2. * @param {number[]} nums1
  3. * @param {number[]} nums2
  4. * @return {number[]}
  5. */
  6. var nextGreaterElement = function (nums1, nums2) {
  7. const m1 = nums1.length, m2 = nums2.length
  8. const stack = []
  9. const hashmap = {}
  10. for (let i = 0; i < m2; i++) {
  11. while(stack.length && nums2[i] > stack[stack.length - 1]) {
  12. hashmap[stack.pop()] = nums2[i]
  13. }
  14. stack.push(nums2[i])
  15. }
  16. stack.length = 0;
  17. for (let i = 0; i < m1; i++) {
  18. stack.push(hashmap[nums1[i]] || -1)
  19. }
  20. return stack
  21. };