Menu
CoddyTech

Min Stack

Trung bìnhNgăn xếppython iconjava iconcpp iconc iconjs icon+10

Thiết kế một ngăn xếp, ngoài các thao tác thông thường push, pop và top, còn có thể báo giá trị nhỏ nhất mà nó chứa bằng getMin. Cả bốn thao tác phải chạy trong thời gian O(1).

Bạn nhận được các thao tác theo thứ tự trong ops, trong đó args[i] chứa giá trị cần thêm bằng thao tác push và là 0 với mọi thao tác khác. Thực hiện chúng trên một ngăn xếp duy nhất, ban đầu rỗng, rồi trả về một chuỗi cho mỗi thao tác: "null" cho push và pop, còn top và getMin trả về số dưới dạng văn bản.

Hàm

minStackOps(ops: string-array, args: integer-array) → string-array
opsstring-array
các thao tác, theo thứ tự chúng chạy
argsinteger-array
giá trị cho mỗi thao tác đẩy, 0 cho mọi thao tác khác
Trả vềstring-array
một câu trả lời cho mỗi phép toán, dưới dạng văn bản

Ràng buộc

  • 1 ≤ ops.length ≤ 3000
  • args.length == ops.length
  • Mỗi ops[i] là push, pop, top hoặc getMin.
  • -231+1 ≤ args[i] ≤ 231-1 cho thao tác push và args[i] == 0 cho mọi thao tác khác.
  • Chỉ gọi pop, top và getMin khi ngăn xếp có ít nhất một giá trị.

Ví dụ

Đầu vào
ops = ["push", "push", "push", "getMin", "pop", "top", "pop", "getMin"]args = [4, 1, 7, 0, 0, 0, 0, 0]
Đầu ra
["null", "null", "null", "1", "null", "1", "null", "4"]
Giải thích
Ngăn xếp chứa các giá trị 4, 1 và 7 theo thứ tự từ dưới lên trên, nên giá trị nhỏ nhất là 1. Lấy 7 ra thì 1 nằm trên cùng. Lấy cả 1 ra thì chỉ còn 4, nên giá trị nhỏ nhất trở lại là 4.
challenge icon

Câu hỏi mở rộng

Bạn có thể xây dựng một hàng đợi vào trước, ra trước có thể cho biết giá trị nhỏ nhất trong thời gian O(1) theo chi phí khấu hao không?

Đặt lại code
def minStackOps(ops, args):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

ops = ["push", "push", "push", "getMin", "pop", "top", "pop", "getMin"]
args = [4, 1, 7, 0, 0, 0, 0, 0]

Đầu ra mong đợi

["null", "null", "null", "1", "null", "1", "null", "4"]