nums1是nums2的子集,并且不会有重复的元素。
要找到nums1中的一个a,a在nums2里面,找到nums2里面,在a右边,与a最接近的,比a大的数字即可。
最简单的方法。
1、在nums2中遍历,直到遇到a,记录a的位置。然后从这个位置开始,继续遍历,找到一个大于a的数字即可。
这样在右边的话,可能第一次就找到大于a的数字了,也可能在最后。
因为是在右边找,有一种反向的思路,就是从右边开始遍历,遍历到a,就行。
在这过程中,如果有大于a的,就记录。因为是从左往右的,越后出现的大于a的数字,就是最接近的。
用最直接的思路,把题目解决了才是最重要的!!!!
代码如下
/** * @param {number[]} findNums * @param {number[]} nums * @return {number[]} */ var nextGreaterElement = function(findNums, nums) { let result = []; for(let item of findNums){ let bigger = item; let i=nums.length-1; while(true){ //右边较大的意思是,在右边且大于item即可 if(nums[i]>item){ bigger = nums[i]; } //相等就是位置到了,要退出了 if(nums[i]===item||i<0){ break; } i--; } if(i>=0&&bigger!=item){ result.push(bigger); }else{ result.push(-1); } } return result; };