Cho danh sách nums, với mỗi chỉ mục i tìm phần tử đầu tiên bên phải (quay vòng về đầu danh sách) lớn hơn nums[i]. Nếu không có, đặt -1.
Ví dụ
Đầu vào: [4, 5, 1, 3].
Đầu ra: [5, -1, 3, 4].
Thuật toán
- Khởi tạo stack chứa 0, kết quả
reskích thướcntoàn -1. - Lặp 2 lần qua mảng:
- Với
itừ 0 đếnn-1:- Khi stack không rỗng và
a[stack[-1]] < a[i]:res[stack.pop()] = a[i]. - Push
ivào stack.
- Khi stack không rỗng và
- Với
- Trả về
res.
Mã nguồn Python
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 / Đầu ra
Input: [4, 5, 1, 3]
Output: [5, -1, 3, 4]