キューを使用したスタックの実装
出典: Hackernoon この記事の内容は、2 つのキューのみを使用してスタックを実装する問題を解決することに専念しています。 Leetcode には問題があります。
2 つのキューのみを使用して、後入れ先出し (LIFO) スタックを実装します。実装されたスタックは、通常のスタックのすべての関数 ( Push、Top、Pop、およびempty ) をサポートする必要があります。 MyStack クラスを実装します。
さらなる詳細:
例 1: 入力
出力
[ヌル、ヌル、ヌル、2、2、偽]
説明
|
問題の解決策
最初のオプション
最初の解決策では、追加のメモリを使用します。static class MyStack {
private Queue<Integer> current;
private Queue<Integer> tmp;
public MyStack() {
current = new ArrayDeque<>();
tmp = new ArrayDeque<>();
}
このソリューションには追加のキューが必要です。まずはPushから始めましょう。プッシュ操作の場合は、現在のキューに新しい要素を追加するだけです。
public void push(int x) {
current.add(x);
}
ここでの主なトリックは、popメソッドです。ここでは、最後の要素を除くすべての要素をtmpキューに入れます。 そして、キュー内の最後の要素が最初に送信される要素になります。
public int pop() {
if (current.isEmpty()){
return -1;
}
int size = current.size();
for (int i = 0; i < size - 1; i ++){
tmp.add(current.poll());
}
int ret = current.poll();
current = tmp;
return ret;
}
上のメソッド はどうでしょうか?このメソッドはPopに似ています。
public int top() {
if (current.isEmpty()){
return -1;
}
int size = current.size();
for (int i = 0; i < size - 1; i ++){
tmp.add(current.poll());
}
int ret = current.peek();
tmp.add(current.poll());
current = tmp;
return ret;
}
最後の空のメソッドについては、現在のキューをチェックするだけです。
public boolean empty() {
return current.isEmpty();
}
2 番目の解決策
このオプションでは、追加のメモリは使用しません。static class MyStack {
private Queue<Integer> current;
public MyStack2() {
current = new ArrayDeque<>();
}
}
ここでの主なアイデアはプッシュ方式です。現在の要素を追加してから、現在の要素の前の要素をキューの最後に移動します。たとえば、要素 [2,1] を持つキューがある場合、プッシュ 3 を使用してキュー [3,2,1] を取得し、次に [1,3,2]、[2,1,3] とします。 ..そしてすべて。
public void push(int x) {
current.add(x);
int size = current.size();
for (int i = 0; i < size-1; i ++){
current.add(current.poll());
}
}
ここでは、他のすべてのメソッドに対する正しい要素とキューの先頭がすでに存在しています。
public int pop() {
return current.poll();
}
public int top() {
return current.peek();
}
public boolean empty() {
return current.isEmpty();
}
Java Math クラスのメソッド
出典: Medium この投稿では、Java Math クラスの機能と範囲について学びます。 Java 言語のJava.lang.Mathパッケージの一部はMathクラスです。このクラスは、 min、max、sqrtなどの事前定義されたメソッドを提供します。以下は、日常業務で使用できる数学クラスのメソッドの例です。1. max()メソッドは、パラメーターに渡された大きい方の数値を返します。System.out.println(Math.max(5,3));
OUTPUT: 5
2. sqrt()メソッドは、引数として渡された数値の平方根を表示します。
System.out.println(Math.sqrt(4));
OUTPUT: 2.0
3.random ()メソッドは、0 から 1 の範囲の乱数を返します。
System.out.println(Math.random());
OUTPUT: 0.8685304957692445
4. abs()メソッドは、負の数値の正の絶対値を返します。たとえば、0 として渡すと、結果として 0 が返されます。
System.out.println(Math.abs(-4));
OUTPUT: 4
System.out.println(Math.abs(4));
OUTPUT: 4
System.out.println(Math.abs(0));
OUTPUT: 0
5. Floor() メソッドは、引数以下で最も近い数学的整数に等しい double 値を返します。
System.out.println(Math.floor(-1.2));
OUTPUT: -2.0
System.out.println(Math.floor(1.2));
OUTPUT: 2.0
GO TO FULL VERSION