(Leetcode 刷題) 下一個更大元素Ⅰ

題目描述

給定兩個 沒有重復元素 的數(shù)組 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下一個比其大的值。

nums1 中數(shù)字 x 的下一個更大元素是指 x 在 nums2 中對應位置的右邊的第一個比 x 大的元素。如果不存在,對應位置輸出 -1 。

496. 下一個更大元素Ⅰ

解法

構(gòu)造一個單調(diào)棧:從棧頂?shù)綏5椎脑貑握{(diào)不減,每當遇到一個比棧頂元素大的,說明棧中所有元素的下一個更大元素是當前元素,將所有元素出棧并存在HashMap里。

class Solution {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
        HashMap<Integer,Integer> map = new HashMap<>();
        LinkedList<Integer> stack = new LinkedList<>();
        for(int a : nums2){
            //注意循環(huán)條件
            //棧為空沒有比較必要,元素入棧;
            //棧不空但元素 a 比棧頂元素小,繼續(xù)入棧元素;
            //棧不空且元素 a 比棧頂大,所有元素出棧,結(jié)果存入HashMap中
            while(!stack.isEmpty() && stack.peek() < a){
                map.put(stack.pop(), a);
            }
            stack.push(a);
        }

        int[] res = new int[nums1.length];
        for(int i = 0; i < res.length; i++){
            res[i] = map.getOrDefault(nums1[i], -1);
        }
        return res;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容