「stay hungry stay young「
具體的題目描述詳見leetcode,這同樣是一道簡單題,根據某一元素,求出在列表中離它最近的比它大的元素,通常情況下,可以採取暴力法求解,但當資料過多時,只能採取其他的方法,對於此類問題,有乙個較為經典的方法求解,就是採用單調棧的資料結構,依然是「**利用空間換時間「**的思想:
單調棧:
本質上仍然滿足棧後進先出的性質,但從棧頂到棧底一定一直保持單調序列,一旦出現不單調的部分,就出棧,棧本身是動態變化的
本題的思路:
對於本題而言,首先我們考慮建立乙個雜湊表,在python中對應字典的資料結構,每個元素,都對應在num2中下乙個比它大的元素,如果沒有,返回-1,基於此操作,問題就轉化成了如何建立乙個dic的問題,這裡採用單調棧,
當乙個元素進棧的時候,首先對棧內元素進行乙個判斷:
基於以上描述,**如下:
class
solution
:def
nextgreaterelement
(self, nums1: list[
int]
, nums2: list[
int])-
> list[
int]
: stack=
dic=
for n in nums2:
while stack and stack[-1
]dic[stack.pop()]
=nreturn
[dic.get(x,-1
)for x in nums1]
複雜度分析:
時間複雜度:o(m+n)其中 m 和 n 分別是陣列 nums1 和 nums2 的長度。
空間複雜度:o(n)我們在遍歷 nums2 時,需要使用棧,以及雜湊對映用來臨時儲存答案。
496 下乙個更大元素
給定兩個 沒有重複元素 的陣列 nums1 和 nums2 其中nums1 是 nums2 的子集。找到 nums1 中每個元素在nums2 中的下乙個比其大的值。nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出 1...
496 下乙個更大元素
給定兩個沒有重複元素的陣列 nums1 和 nums2 其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下乙個比其大的值。nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出 1。...
496 下乙個更大元素
給定兩個沒有重複元素的陣列 nums1 和 nums2 其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下乙個比其大的值。nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出 1。...