代码随想录算法训练营第四十八天| 739. 每日温度 、 496.下一个更大元素 I 、503.下一个更大元素II

18 阅读1分钟

739. 每日温度

相关链接:题目链接文章讲解 视频讲解

解题思路

代码实现

var dailyTemperatures = function(temperatures) {
    var stack  = new Array();
    var result = new Array(temperatures.length).fill(0);
    stack.push(0);
    for(let i=1; i<temperatures.length; i++){
        var idx = stack[stack.length-1];
        if(temperatures[i] <= temperatures[idx]){
            stack.push(i);
        }else{
           while(temperatures[i] > temperatures[idx]){
                result[idx] = i-idx;
                stack.pop();
                if(stack.length>0){
                    idx  = stack[stack.length-1];
                }else{
                    break;
                }
            }
            stack.push(i);
        }
    }
    return result;
};

496.下一个更大元素 I

相关链接:题目链接文章讲解 视频讲解

解题思路

代码实现

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var nextGreaterElement = function(nums1, nums2) {
    var result = new Array(nums1.length).fill(-1);
    var stack = new Array();
    stack.push(0);
    var map = new Map();
    for(let i=0;i<nums1.length;i++){
        map.set(nums1[i],i);
    }

    for(let i=1;i<nums2.length;i++){
        var top = stack[stack.length-1];
        if(nums2[i] <= nums2[top]){
            stack.push(i);
        }else{
           while(nums2[i] > nums2[top]){
                if(map.has(nums2[top])){
                    var idx  = map.get(nums2[top]);
                    result[idx] = nums2[i];
                }
                stack.pop();
                top = stack[stack.length-1];
           }
           stack.push(i);
        }
    }
    return result;
};

503.下一个更大元素II

相关链接:题目链接文章讲解 视频讲解

解题思路

代码实现

var nextGreaterElements = function(nums) {
    var result = new Array(nums.length).fill(-1);
    var stack = new Array();
    stack.push(0);
    for(let i=1;i< 2 * nums.length;i++){
        var top = stack[stack.length-1];
        if(nums[i%nums.length] <= nums[top]){
            stack.push(i%nums.length)
        }else{
            while(nums[i%nums.length] > nums[top]){
                result[top] = nums[i%nums.length];
                stack.pop();
                top = stack[stack.length-1];
            }
            stack.push(i%nums.length);
        }
    }

    return result;
};