給定兩個沒有重複元素的陣列 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。...