建立一个单调栈
s
s
s,从后往前遍历
n
u
m
s
2
nums2
nums2,当前位置记作
i
i
i。执行如下操作:
如果
s
s
s空,
n
u
m
s
2
[
i
]
nums2[i]
nums2[i]入栈;如果
s
s
s非空,且
s
[
t
o
p
]
>
n
u
m
s
2
[
i
]
s[top]>nums2[i]
s[top]>nums2[i],栈顶元素
s
[
t
o
p
]
s[top]
s[top]弹栈。
重复上述操作,每次操作时,如果栈空,说明
n
u
m
s
2
+
i
nums2+i
nums2+i后没有数比
n
u
m
s
2
[
i
]
nums2[i]
nums2[i]大,对应
n
u
m
s
1
nums1
nums1的答案就是-1;如果栈非空,说明
n
u
m
s
2
+
i
nums2+i
nums2+i后有数比
n
u
m
s
[
i
]
nums[i]
nums[i]大,且最靠近
n
u
m
s
[
i
]
nums[i]
nums[i]的数就是
s
[
t
o
p
]
s[top]
s[top]。
寻找
n
u
m
s
2
[
i
]
nums2[i]
nums2[i]右侧最近的大于
n
u
m
s
2
[
i
]
nums2[i]
nums2[i]的数,特别像栈后进先出的性质,这就是本题使用栈的原因。
时间复杂度:
O
(
m
+
n
)
O(m+n)
O(m+n) ,
n
u
m
s
1
nums1
nums1数组的大小=
m
m
m,
n
u
m
s
2
nums2
nums2数组的大小=
n
n
n。一次遍历
n
u
m
s
1
和
n
u
m
s
2
nums1和nums2
nums1和nums2的时间复杂度是
O
(
m
+
n
)
O(m+n)
O(m+n)。
空间复杂度:
O
(
n
)
O(n)
O(n),哈希链表的大小和
n
u
m
s
2
nums2
nums2的大小相等,哈希链表的空间复杂度:
O
(
n
)
O(n)
O(n)。