496 下乙個最大元素 python實現

2021-10-17 03:32:56 字數 1005 閱讀 2542

「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。...