Два стека аналоговых очереди (интервью вопросов leetcode 09)
Решение: Определение стека s1 и s2, команда пут s1, команда затем взять приоритет s2, то s1 s2 все пусто Go s2, то взять.
S1, суффикс, соответствующий разряд тока, s2 разрядного тока префикса.
класс CQueue { общественный : стек < INT > s1, s2; CQueue () { } недействительными appendTail ( INT значение) { s1.push (значение); } INT deleteHead () { если (s1.empty () && s2.empty) () возвращение - 1 ; если (s2.empty ()) { в то время как (! s1.empty ()) { s2.push (s1.top ()); s1.pop (); } } INT TMP =s2.top (); s2.pop (); вернуться TMP; } };
Два аналоговых очереди стеки (leetcode225)
Решение: Рисунок: элемент в очереди А. Стек: Очередь А определяется ли число элементов 1, 1, если она равна, то очередь, если А больше, чем один элемент, элемент А будет помещен в очередь и DEQUEUE этой очереди B, до очереди а является левой элемент, то очередь очередь, в противном случае, а является пустым, то таким же образом, пока Б к не оставил передачу.
Другой подход: использование очереди, лучше, прямой стек толчок, выскочить из п-1 до команды снова нажать, эквивалентен цикл.
# include <бит / STDC ++ ч.> с использованием пространства имен STD; класс MyStack { частное : очереди < INT > q1, q2; общественности : / * * Initialize ваша структура данных здесь. * / MyStack () { } / * * Нажмите элемент й на стек. * / Недействительным толчок ( INT х) { q1.push (х); } / * * Удаляет элемент на вершине стека и возвращает этот элемент. * / INT поп () { INT RET; если(q1.empty () && q2.empty ()) возвращение - 1 ; INT SZ = q1.size (); если (SZ == 1 ) { RET = q1.front (); q1.pop (); } Иначе , если (SZ> 1 ) { в то время как (q1.size ()> 1 ) { q2.push (q1.front ()); q1.pop (); } RET = q1.front (); q1.pop (); } еще { В то время как (q2.size ()> 1 ) { q1.push (q2.front ()); q2.pop (); } RET = q2.front (); q2.pop (); } Возврата RET; } / * * Получить верхний элемент. * / INT сверху () { INT RET; если (q1.empty () && q2.empty ()) возвращение - 1 ; INT SZ = q1.size (); если (SZ == 1 ) { RET = q1.front (); // q1.pop (); } Иначе , если (SZ> 1 ) { в то время как (q1.size ()> 1 ) { q2.push (q1.front ()); q1.pop (); } RET = q1.front (); // q1.pop (); } Иначе { в то время как (q2.size ()> 1 ) { q1.push (q2.front ()); q2.pop (); } RET = q2.front (); // q2.pop (); q1.push (q2.front ()); // Q2 передавать полный покой, или заказ не будет q2.pop (); } возвращение RET; } / * * Возвращает ли стек пуст. * / BOOL пустой () { возвращение q1.empty () && q2.empty (); } }; INT основной () { MyStack * OBJ = новый новый MyStack (); OBJ -> Нажмите ( 1. ); OBJ -> Нажать ( 2); OBJ -> толчок ( 3 ); соиЬ << obj-> верх () << епсИ; соиЬ << obj-> поп () << епсИ; соиЬ << obj-> верх () << епсИ; соиЬ << obj-> поп () << епсИ; соиЬ << obj-> верх () << епсИ; }
Ссылка Ссылки: https://blog.csdn.net/violet_echo_0908/article/details/50986516