1
.问题描述
两个不重复的数组
nums1
和
nums2
,其中
nums1
是
nums2
的子集。在
nums2
的相应位置找到
nums1
所有元素的下一个更大数字。
nums1
中的数字
x
的下一个更大数字是
nums2
中
x
右边第
1
个更大的数
字。如果它不存在,则为此数字输出
-1
。
nums1
和
nums2
中的所有数字都
是唯一的,
nums1
和
nums2
的长度不超过
1000
。
2
.问题示例
输入
nums1=[4
,
1
,
2]
,
nums2=[1
,
3
,
4
,
2]
,输出
[-1
,
3
,
-1]
。对
于第
1
个数组中的数字
4
,在第
2
个数组中找不到下一个更大的数字,因
此输出
-1
;对于第
1
个数组中的数字
1
,第
2
个数组中的下一个更大数字
是
3
;对于第
1
个数组中的数字
2
,第
2
个数组中没有下一个更大的数字,
因此输出
-1
。
3
.代码实现
class Solution:
def nextbig(self,nums1,nums2):
answer = {}
stack = []
for x in nums2:
##运用栈,字典里对应元素对应下一个较大值
while stack and stack[-1] < x:
answer[stack[-1]] = x
del stack[-1]
stack.append(x)
for x in stack:
answer[x] = -1
p = []
for x in nums1:
p.append(answer[x])
return p
if __name__ == "__main__":
s = Solution()
nums1 = [4,1,2]
nums2 = [1,3,4,2]
print(s.nextbig(nums1,nums2))
4
.运行结果
输入:
[4,1,2]
[1,3,4,2]
输出:
[-1,3,-1]