Menu
CoddyTech

Implement Queue Using Stacks

Hãy xây dựng một hàng đợi vào trước, ra trước chỉ dùng hai ngăn xếp để lưu trữ. Mỗi ngăn xếp chỉ có thể thêm một phần tử lên trên cùng, xóa phần tử trên cùng, đọc phần tử trên cùng và cho biết nó có rỗng hay không. Hàng đợi hỗ trợ push x (thêm x vào cuối hàng), pop (xóa và trả về phần tử ở đầu hàng), peek (trả về phần tử ở đầu hàng) và empty (hàng đợi có rỗng không?).

Bạn nhận được các thao tác theo thứ tự trong ops, với args[i] chứa giá trị cho thao tác push và 0 cho mọi thao tác khác. Thực hiện chúng trên một hàng đợi ban đầu rỗng và trả về một chuỗi cho mỗi thao tác: "null" cho thao tác push, số ở dạng văn bản cho thao tác pop hoặc peek, và "true" hoặc "false" cho thao tác empty.

Hàm

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

Ràng buộc

  • 1 ≤ ops.length ≤ 2000
  • args.length == ops.length
  • Mỗi ops[i] là push, pop, peek hoặc empty.
  • -109 ≤ args[i] ≤ 109 đối với thao tác push, và args[i] == 0 đối với mọi thao tác khác.
  • pop và peek chỉ được gọi khi hàng đợi có ít nhất một phần tử.

Ví dụ

Đầu vào
ops = ["push", "push", "peek", "pop", "empty"]args = [1, 2, 0, 0, 0]
Đầu ra
["null", "null", "1", "1", "false"]
Giải thích
Sau khi đẩy 1 rồi đến 2 vào, phần đầu là 1, nên cả peek và pop đều trả về "1". Số 2 vẫn còn bên trong, nên empty trả về "false".
challenge icon

Câu hỏi mở rộng

Làm thế nào để bạn thêm một thao tác back trả về phần tử mới nhất trong O(1), mà không làm phá vỡ giới hạn khấu hao của các thao tác khác?

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

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

ops = ["push", "push", "peek", "pop", "empty"]
args = [1, 2, 0, 0, 0]

Đầu ra mong đợi

["null", "null", "1", "1", "false"]