赞
踩
1.分析题目:
a.对应位置右侧的第一个比x大的元素----->单调栈
b.两个没有重复元素的数组 nums1 和 nums2—>无重复,可以通过建立map代替双重循环解决问题
这里这个map思维之前并未建立,
可以通过单重循环,在循环过程中判断map中是否含有另一个数组的元素,解决问题。
情况一:当前遍历的元素T[i]小于或等于栈顶元素T[st.top()]的情况
情况二:当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况
此时如果入栈就不满足递增栈了,这也是找到右边第一个比自己大的元素的时候。
判断栈顶元素是否在nums1里出现过,(注意栈里的元素是nums2的元素),如果出现过,开始记录结果。
2.和上一个温度不同点:
a.两个数组更加麻烦一些,需要建立map
b.需要判断是否在另一个数组中—>进而判断是否需要记录结果
代码展示
class Solution: def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]: map={} result=[-1]*len(nums1) stack=[] for i in range(len(nums1)): if nums1[i] in nums2: map[nums1[i]]=i for i in range(len(nums2)): if len(stack)==0 or nums2[i]<=nums2[stack[-1]]: stack.append(i) while len(stack)!=0 and nums2[i]>nums2[stack[-1]]: if nums2[stack[-1]] in map: result[map[nums2[stack[-1]]]]= nums2[i] stack.pop() stack.append(i) return result
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。