Tất cả thử thách
Trung bình 0 đã giải Tỷ lệ chấp nhận 0%

Ngăn xếp với giá trị nhỏ nhất

Xây dựng một stack có thể báo cáo phần tử nhỏ nhất của nó ngay lập tức sau bất kỳ lần push hoặc pop nào.

Bạn sẽ học được gì

  • Lưu giá trị nhỏ nhất cùng mỗi lần push
  • Trả lời truy vấn min trong thời gian hằng
  • Xử lý pop trên ngăn xếp rỗng an toàn

Đề bài

Xem bản gốc (English)

Một generic Stack<T> hoạt động với mọi kiểu. Ở đây bạn mở rộng ý tưởng đó: một stack các số nguyên cũng có thể báo cáo giá trị nhỏ nhất của nó trong thời gian hằng số.

Xử lý các operations theo thứ tự:

  • push <x>: đẩy x vào stack.
  • pop: xóa giá trị trên cùng (bỏ qua khi stack rỗng).
  • min: báo cáo giá trị nhỏ nhất hiện có trong stack, hoặc -1 nếu stack rỗng.

Implement min_stack_operations(operations).

Input

operations: Các operations.

Output

Trả về các câu trả lời của các min operations, theo thứ tự.

Ràng buộc

1 ≤ số thao tác ≤ 200,000

0 ≤ x ≤ 10^9

Ví dụ

Ví dụ 1
Đầu vào:
operations = ["push 5", "push 3", "min", "pop", "min"]

Kết quả mong đợi:
expected = [3, 5]
Đầu vào:
std::vector<std::string> operations = {"push 5", "push 3", "min", "pop", "min"};

Kết quả mong đợi:
std::vector<long long> expected = {3, 5};
Đầu vào:
string[] operations = new string[] {"push 5", "push 3", "min", "pop", "min"};

Kết quả mong đợi:
long[] expected = new long[] {3, 5};

Giải thích

Với 5 và 3 trên stack thì giá trị nhỏ nhất là 3. Sau khi pop 3, chỉ còn 5: [3, 5].

Ví dụ 2
Đầu vào:
operations = ["min", "pop", "push 7", "min"]

Kết quả mong đợi:
expected = [-1, 7]
Đầu vào:
std::vector<std::string> operations = {"min", "pop", "push 7", "min"};

Kết quả mong đợi:
std::vector<long long> expected = {-1, 7};
Đầu vào:
string[] operations = new string[] {"min", "pop", "push 7", "min"};

Kết quả mong đợi:
long[] expected = new long[] {-1, 7};

Giải thích

Stack rỗng trả về -1 và pop bị bỏ qua; sau đó giá trị nhỏ nhất là 7: [-1, 7].

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

Cạnh mỗi giá trị, lưu giá trị nhỏ nhất của ngăn xếp tại thời điểm đó.

Gợi ý 2

Khi đó giá trị nhỏ nhất hiện tại chính là đỉnh của ngăn xếp thứ hai.

Gợi ý 3

Bỏ qua pop khi ngăn xếp rỗng, và trả -1 cho min khi rỗng.

Độ phức tạp mong đợi

thời gian O(số thao tác), bộ nhớ phụ O(số thao tác)

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.