496 下乙個更大的元素

2021-09-06 23:39:47 字數 1716 閱讀 3393

給定兩個沒有重複元素的陣列 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下乙個比其大的值。

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

示例 1:

輸入: nums1 = [4,1,2], nums2 = [1,3,4,2].

輸出: [-1,3,-1]

解釋: 對於num1中的數字4,你無法在第二個陣列中找到下乙個更大的數字,因此輸出 -1。

對於num1中的數字1,第二個陣列中數字1右邊的下乙個較大數字是 3。

對於num1中的數字2,第二個陣列中沒有下乙個更大的數字,因此輸出 -1。

示例 2:

輸入: nums1 = [2,4], nums2 = [1,2,3,4].

輸出: [3,-1]

解釋: 對於num1中的數字2,第二個陣列中的下乙個較大數字是3。

對於num1中的數字4,第二個陣列中沒有下乙個更大的數字,因此輸出 -1。

暴力法:

class

solution

:def

nextgreaterelement

(self, nums1, nums2)

:"""

:type nums1: list[int]

:type nums2: list[int]

:rtype: list[int]

"""greater =

for num in nums1:

greaternum =

-float

('inf'

) stacks = nums2.copy(

)while

true

: nextnum = stacks.pop(

)if nextnum == num:

# 如果在nums2中找到num就停止迭代

break

elif nextnum >= num:

# 找到nums2的num之後的第乙個比num大的數

greaternum = nextnum

if num > greaternum:

#沒有找到就返回-1-1

)else

:#找到了就返回這個最近的比num大的數

return greater

利用單調棧和雜湊表

class

solution

:def

nextgreaterelement

(self, nums1, nums2)

:"""

:type nums1: list[int]

:type nums2: list[int]

:rtype: list[int]

"""stack =

hashtable =

for num in nums2:

while stack !=

and num > stack[-1

]:hashtable[stack.pop()]

= num

res =

for num in nums1:-1

))return res

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