Giả sử chúng ta có một danh sách các số được gọi là nums. Chúng ta phải tìm một danh sách mới có cùng độ dài trong đó giá trị tại chỉ mục i được gán cho phần tử tiếp theo lớn hơn nums [i] ở bên phải của nó, vòng trở lại phía trước danh sách khi được yêu cầu. Nếu không có số nào lớn hơn, thì nó phải được đặt thành -1.
Vì vậy, nếu đầu vào là [4, 5, 1, 3], thì đầu ra sẽ là [5, -1, 3, 4]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau−
-
n:=kích thước của một
-
stack:=một ngăn xếp, ban đầu chèn 0, res:=một danh sách có kích thước n và điền bằng -1
-
đối với mỗi giá trị trong phạm vi 0 và 1, hãy thực hiện
-
đối với tôi trong phạm vi từ 0 đến n-1, hãy thực hiện
-
trong khi ngăn xếp không trống và [đầu ngăn xếp]
-
res [đầu ngăn xếp]:=a [i]
-
xóa phần tử cuối cùng khỏi ngăn xếp
-
-
chèn i vào cuối ngăn xếp
-
-
trả lại res
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
class Solution: def solve(self, a): n = len(a) stack, res = [0], [-1] * n for _ in range(2): for i in range(n): while stack and a[stack[-1]] < a[i]: res[stack[-1]] = a[i] stack.pop() stack.append(i) return res ob = Solution() nums = [4, 5, 1, 3] print(ob.solve(nums))
Đầu vào
[4, 5, 1, 3]
Đầu ra
[5, -1, 3, 4]