LeetCode496-下一个更大的元素(遍历)

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;
};

猜你喜欢

转载自www.cnblogs.com/weizhibin1996/p/9971611.html
今日推荐