503. 下一個更大元素 II(中等)

athenanevergiveup發表於2024-04-01

核心思想
維護一個單調遞減的單調棧(非嚴格)
但是由於是迴圈的,做兩次迴圈即可
程式碼

public int[] nextGreaterElements(int[] nums) {
        Deque<Integer> dq = new ArrayDeque<>();
        int[] res = new int[nums.length];
        Arrays.fill(res, -1);
        for(int k = 0; k < 2; k++){
            for(int i = 0; i < nums.length; i++){
		//維護單調遞減的單調棧(非嚴格)
                if(dq.isEmpty() || nums[i] <= nums[dq.getLast()]){
                    dq.add(i);
                }else{
		    // 找到答案
                    while(!dq.isEmpty() && nums[i] > nums[dq.getLast()]){
                        res[dq.getLast()] = nums[i];
                        dq.pollLast();
                    }
                    dq.add(i);
                }
            }
        }
        return res;
    }

相關文章