Menu
CoddyTech

Implement Queue Using Stacks

בנו תור מסוג ראשון נכנס, ראשון יוצא, שהאחסון היחיד שלו הוא שתי מחסניות. מחסנית יכולה רק להוסיף איבר לראש המחסנית, להסיר את האיבר שבראש המחסנית, לקרוא את האיבר שבראש המחסנית ולציין אם היא ריקה. התור תומך ב־push x (הוספת x לסוף), ב־pop (הסרת האיבר הראשון והחזרתו), ב־peek (החזרת האיבר הראשון) וב־empty (האם התור ריק?).

הפעולות ניתנות לפי הסדר בתוך ops, כאשר args[i] מכיל את הערך עבור פעולת push ואת 0 עבור כל פעולה אחרת. הריצו אותן על תור אחד שמתחיל ריק והחזירו מחרוזת אחת לכל פעולה: "null" עבור פעולת push, את המספר כטקסט עבור פעולת pop או peek, ואת "true" או "false" עבור empty.

פונקציה

queueOps(ops: string-array, args: integer-array) → string-array
opsstring-array
הפעולות, לפי סדר ביצוען
argsinteger-array
הערך עבור כל פעולת push, ו־0 עבור כל פעולה אחרת
מחזירהstring-array
תשובה אחת לכל פעולה, כטקסט

אילוצים

  • 1 ≤ ops.length ≤ 2000
  • args.length == ops.length
  • כל אחד מהערכים ב־ops[i] הוא push, pop, peek או empty.
  • -109 ≤ args[i] ≤ 109 עבור פעולת דחיפה, ו-args[i] == 0 עבור כל פעולה אחרת.
  • pop ו-peek נקראות רק כאשר התור מכיל לפחות פריט אחד.

דוגמאות

קלט
ops = ["push", "push", "peek", "pop", "empty"]args = [1, 2, 0, 0, 0]
פלט
["null", "null", "1", "1", "false"]
הסבר
אחרי הכנסת 1 ואז 2, החזית היא 1, לכן גם peek וגם pop מחזירות "1". ה־2 עדיין בפנים, לכן empty מחזירה "false".

lock icon+15 בדיקות נסתרות בשליחה

challenge icon

שאלת המשך

איך היית מוסיף פעולה back שמחזירה את הפריט החדש ביותר ב־O(1), בלי להפר את החסם האמורטי של שאר הפעולות?

איפוס הקוד
def queueOps(ops, args):
    # כתבו כאן את הקוד
מקרי בדיקה

מקרה 1

מקרה 2

מקרה 3

קלט

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

צפוי

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