JavaRush /Java Blog /Random-JA /コーヒーブレイク#162。キューを使用したスタックの実装。Java Math クラスのメソッド

コーヒーブレイク#162。キューを使用したスタックの実装。Java Math クラスのメソッド

Random-JA グループに公開済み

キューを使用したスタックの実装

出典: Hackernoon この記事の内容は、2 つのキューのみを使用してスタックを実装する問題を解決することに専念しています。 Leetcode には問題がコーヒーブレイク#162。 キューを使用したスタックの実装。 Java Math クラスのメソッド - 1あります。

2 つのキューのみを使用して、後入れ先出し (LIFO) スタックを実装します。実装されたスタックは、通常のスタックのすべての関数 ( PushTopPop、およびempty ) をサポートする必要があります。

MyStack クラスを実装します。

  • void Push(int x)要素 x をスタックの先頭にプッシュします。

  • int Pop()スタックの先頭にある要素を削除して返します。

  • int top()スタックの先頭にある要素を返します。

  • boolean empty()スタックが空の場合はtrueを返し、それ以外の場合はfalse を返します。

さらなる詳細:

  • 標準のキュー操作のみを使用してください。つまり、後ろへのプッシュ前からのピーク/ポップサイズ、および空の操作のみが許可されます。

  • プログラミング言語によっては、キューがネイティブにサポートされていない場合があります。ただし、標準のキュー操作のみを使用する場合は、リストまたはデキュー (ダブル キュー) を使用してキューをシミュレートできます。

例 1:

入力

["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]

出力

[ヌル、ヌル、ヌル、2、2、偽]

説明

MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // возвращает 2
myStack.pop(); // возвращает 2
myStack.empty(); // возвращает False

問題の解決策

最初のオプション

最初の解決策では、追加のメモリを使用します。
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コーヒーブレイク#162。 キューを使用したスタックの実装。 Java 数学クラスのメソッド - 2パッケージの一部はMathクラスです。このクラスは、 minmaxsqrtなどの事前定義されたメソッドを提供します。以下は、日常業務で使用できる数学クラスのメソッドの例です。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
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION