class Solution:
def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
#暴力解法
res = []
for i in range(len(nums1)):
index = nums2.index(nums1[i])
flag = False
while index<len(nums2):
if nums2[index]>nums1[i]:
flag = True
break
index+=1
if flag:
res.append(nums2[index])
else:
res.append(-1)
return res
#单调栈
stack = []
dic = dict()
#这样做使得num2中每个元素如果存在下一个比他大的元素,那么就会形成键值对。
#然后让nums1中的元素去查找它,如果找到了就返回该值,如果找不到那就返回-1
for num in nums2:
while stack and stack[-1]<num:
dic[stack.pop()] = num
stack.append(num)
return [dic.get(num,-1) for num in nums1]
- Es mejor pensar en la ley violenta, pero la eficiencia no es muy alta
- La pila monótona se usa para formar una tabla hash, los pares clave-valor aumentan y luego num1 realiza una operación de búsqueda en la tabla hahs
- El método de pila monótona nunca se espera, pero la eficiencia es mayor.
class Solution:
def nextGreaterElements(self, nums: List[int]) -> List[int]:
n = len(nums)
#ret放的是最终结果
ret = [-1] * n
#栈放得是索引
stk = []
for i in range(n * 2):
while stk and nums[stk[-1]] < nums[i % n]:
ret[stk.pop()] = nums[i % n]
stk.append(i % n)
return ret
- Dado que es una matriz circular, simplemente enderece la matriz, es decir, agregue una matriz después de la matriz original
- Lo que se almacena en la pila no es un valor ni un subíndice de una lista.
- Debido a que está enderezado, la flor del elemento actual debe ser módulo n