496.下一个最大元素I
基本思想:
先对num1中每一个元素他的下一个最大元素对应的写成个字典,
再将num2中每一个元素在字典中找到对应的value放到一个列表中
具体实现:
stack是栈
stack[-1]是列表中最后一个元素
stack.pop()弹出的是最后一个元素--------出栈
stack.append()在列表末尾加入一个元素--------入栈
代码:
class Solution: def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]: # time O(n), space O(n) stack = [] book = {} for i in range(len(nums2)): while stack and stack[-1] < nums2[i]: book[stack.pop()] = nums2[i] stack.append(nums2[i]) res = [] for n in nums1: if n in book: res.append(book[n]) else: res.append(-1) return res
503、下一个最大元素II
基本思想:
将原来的数组复制成双倍大小
具体实现:
i是用来计数的
stack这个栈里存放的是nums中每个元素的下标,不是每个元素
因为要根据下标来修改结果数组res
代码:
class Solution(object): def nextGreaterElements(self, nums): """ :type nums: List[int] :rtype: List[int] """ N = len(nums) res = [-1] * N stack = [] for i in range(N * 2): while stack and nums[stack[-1]] < nums[i % N]: res[stack.pop()] = nums[i % N] stack.append(i % N) return res