leetcode 503 下一个最大元素2
这次是循环数组,所以属于一共遍历两次,第一次到了结尾,把i置为0,继续遍历。
class Solution: def nextGreaterElements(self, nums: List[int]) -> List[int]: result=[-1 for _ in range(len(nums))] stack=[] count=0 flag=False i=0 while i<len(nums): while stack and nums[stack[-1]]<nums[i]: s=stack[-1] print(s) stack=stack[:-1] result[s]=nums[i] stack.append(i) i+=1 if i==len(nums) and not flag: i=0 flag=True return result
也可以直接遍历2*n-1的元素,然后通过取余的方式来得到当前下标。
class Solution: def nextGreaterElements(self, nums: List[int]) -> List[int]: result=[-1 for _ in range(len(nums))] stack=[] count=0 flag=False for i in range(2*len(nums)-1): while stack and nums[stack[-1]]<nums[(i%(len(nums)))]: s=stack[-1] stack=stack[:-1] result[s]=nums[i%(len(nums))] stack.append((i%(len(nums)))) return result