Study Plan - Programming Skills。

題目

不重複整數陣列nums1和nums2,nums1為nums2的子集合。求nums1中每個整數n在nums2中往右遇到第一個比n更大的數為多少;若無則為-1。

解法

因為num2都是往右邊找,也有可能左方多個數共用同一個更大數
維護堆疊st,遍歷nums2所有數n,若堆疊最上方的數小於當前的n,則該數的更大數為n,保存至雜湊表gt。
最後遍歷nums1所有數,試著從gt裡面找處理完的更大數,找不到則回傳-1。

class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
        st=[]
        ans=[]
        gt={}
        
        for n in nums2:
            while st and n>st[-1]:
                gt[st.pop()]=n
            st.append(n)
            
        for n in nums1:
            if n in gt:
                ans.append(gt[n])
            else:
                ans.append(-1)
                
        return ans