【LeetCode OJ 232】Implement Queue using Stacks
2137 ワード
タイトルリンク:https://leetcode.com/problems/implement-queue-using-stacks/
テーマ:Implement the following operations of a queue using stacks.
push(x) -- Push element x to the back of queue.
pop() -- Removes the element from in front of queue.
peek() -- Get the front element.
empty() -- Return whether the queue is empty.
Notes:
You must use only standard operations of a stack -- which means only
Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).
問題解決の構想:問題はスタックでキューを実現し、その入キュー、出キューを実現し、キューのヘッダ要素を表示し、キューが空であるかどうかを判断する4つの操作を実現することを要求する.大まかな考え方は,実装キューを2つのスタックでシミュレートし,スタックs 1を記憶空間とし,スタックs 2を一時バッファとする.
エンキュー時:s 1に要素を押し込む
デキュー時:まずs 2が空であるかどうかを判断し、空でない場合はスタックトップ要素を直接ポップアップし、空である場合はs 1の要素を1つずつs 2に注ぎ込み、最後の要素をポップアップしてデキューします.
サンプルコードは次のとおりです.
テーマ:Implement the following operations of a queue using stacks.
push(x) -- Push element x to the back of queue.
pop() -- Removes the element from in front of queue.
peek() -- Get the front element.
empty() -- Return whether the queue is empty.
Notes:
You must use only standard operations of a stack -- which means only
push to top
, peek/pop from top
, size
, and is empty
operations are valid. Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).
問題解決の構想:問題はスタックでキューを実現し、その入キュー、出キューを実現し、キューのヘッダ要素を表示し、キューが空であるかどうかを判断する4つの操作を実現することを要求する.大まかな考え方は,実装キューを2つのスタックでシミュレートし,スタックs 1を記憶空間とし,スタックs 2を一時バッファとする.
エンキュー時:s 1に要素を押し込む
デキュー時:まずs 2が空であるかどうかを判断し、空でない場合はスタックトップ要素を直接ポップアップし、空である場合はs 1の要素を1つずつs 2に注ぎ込み、最後の要素をポップアップしてデキューします.
サンプルコードは次のとおりです.
/**
*
* @author
* @date 2016-02-25
*
*/
public class Solution
{
Stack<Integer> s1 = new Stack<>();
Stack<Integer> s2 = new Stack<>();
// Push element x to the back of queue.
public void push(int x)
{
s1.push(x);
}
// Removes the element from in front of queue.
public void pop()
{
if (!s2.empty())
{
s2.pop();
} else if (s1.isEmpty())
{
return;
} else
{
while (!s1.isEmpty())
{
int temp = s1.pop();
s2.push(temp);
}
s2.pop();
}
}
// Get the front element.
public int peek()
{
if (!s2.isEmpty())
return s2.pop();
else if (s1.isEmpty())
{
return -1;
} else
{
while (!s1.isEmpty())
{
int temp = s1.pop();
s2.push(temp);
}
return s2.peek();
}
}
// Return whether the queue is empty.
public boolean empty()
{
return s1.isEmpty() && s2.isEmpty();
}
}