JavaRush /Java Blog /Random-ID /Rehat kopi #162. Implementasi tumpukan menggunakan antria...

Rehat kopi #162. Implementasi tumpukan menggunakan antrian. Metode kelas Java Math

Dipublikasikan di grup Random-ID

Menerapkan tumpukan menggunakan antrian

Sumber: Hackernoon Isi artikel ini dikhususkan untuk memecahkan masalah implementasi tumpukan hanya dengan menggunakan dua antrian. Rehat kopi #162.  Implementasi tumpukan menggunakan antrian.  Metode kelas Java Math - 1Kami memiliki masalah dengan Leetcode :

Menerapkan tumpukan terakhir masuk pertama keluar (LIFO) hanya dengan menggunakan dua antrean. Tumpukan yang diimplementasikan harus mendukung semua fungsi tumpukan biasa ( push , top , pop , dan blank ).

Implementasikan kelas MyStack:

  • void push(int x) Dorong elemen x ke atas tumpukan.

  • int pop() Menghapus elemen di bagian atas tumpukan dan mengembalikannya.

  • int top() Mengembalikan elemen di bagian atas tumpukan.

  • boolean kosong() Mengembalikan nilai benar jika tumpukan kosong, salah jika sebaliknya .

Detil tambahan:

  • Anda sebaiknya hanya menggunakan operasi antrean standar, yang berarti hanya operasi push to back , peek/pop from front , size , dan is blank yang diperbolehkan .

  • Tergantung pada bahasa pemrograman Anda, antrean mungkin tidak didukung secara asli. Namun Anda dapat mensimulasikan antrian menggunakan daftar atau deque (antrian ganda) jika Anda hanya menggunakan operasi antrian standar.

Contoh 1:

Memasukkan

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

Keluaran

[batal, batal, batal, 2, 2, salah]

Penjelasan

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

Solusi dari masalah tersebut

Pilihan pertama

Pada solusi pertama kita akan menggunakan memori tambahan:
static class MyStack {
  private Queue<Integer> current;
  private Queue<Integer> tmp;

  public MyStack() {
    current = new ArrayDeque<>();
    tmp = new ArrayDeque<>();
  }
Kami memerlukan antrian tambahan untuk solusi ini. Mari kita mulai dengan mendorong . Untuk operasi push , kita cukup menambahkan elemen baru ke antrian saat ini.
public void push(int x) {
  current.add(x);
}
Trik utama di sini adalah metode pop . Di sini kita memasukkan semua elemen kecuali yang terakhir ke dalam antrian tmp . Dan sekarang elemen terakhir dalam antrian menjadi elemen pertama yang dikirim.
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;
}
Bagaimana dengan metode teratas ? Metode ini mirip dengan 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;
}
Dan untuk metode kosong terakhir , kita cukup memeriksa antrian saat ini:
public boolean empty() {
  return current.isEmpty();
}

Solusi kedua

Dalam opsi ini kami tidak akan menggunakan memori tambahan:
static class MyStack {

  private Queue<Integer> current;

  public MyStack2() {
    current = new ArrayDeque<>();
  }
}
Ide utama di sini adalah metode push . Kami menambahkan elemen saat ini dan kemudian memindahkan elemen sebelum elemen saat ini ke akhir antrian. Misalnya, jika kita memiliki antrian dengan elemen [2,1], kita menggunakan push 3 - dan mendapatkan antrian [3,2,1], lalu [1,3,2], [2,1,3] dan. .. dan semua.
public void push(int x) {
  current.add(x);
  int size = current.size();

  for (int i = 0; i < size-1; i ++){
    current.add(current.poll());
  }
}
Di sini kita sudah memiliki elemen yang benar dan awal antrian untuk semua metode lainnya.
public int pop() {
  return current.poll();
}

public int top() {
  return current.peek();
}

public boolean empty() {
  return current.isEmpty();
}

Metode kelas Java Math

Sumber: Medium Dalam postingan ini, Anda akan mempelajari tentang kemampuan dan cakupan kelas Java Math. Rehat kopi #162.  Implementasi tumpukan menggunakan antrian.  Metode Kelas Matematika Java - 2Bagian dari paket Java.lang.Math dalam bahasa Java adalah kelas Math . Kelas ini memberi kita beberapa metode yang telah ditentukan sebelumnya seperti min , max , sqrt dan lainnya. Di bawah ini adalah contoh beberapa metode dari kelas Matematika yang dapat kita gunakan dalam pekerjaan kita sehari-hari. 1. Metode max() mengembalikan angka lebih besar yang diteruskan dalam parameter:
System.out.println(Math.max(5,3));
OUTPUT: 5
2. Metode sqrt() akan menunjukkan kepada kita akar kuadrat dari bilangan yang dimasukkan sebagai argumen:
System.out.println(Math.sqrt(4));
OUTPUT: 2.0
3. Metode random() mengembalikan angka acak dalam rentang 0 hingga 1.
System.out.println(Math.random());
OUTPUT: 0.8685304957692445
4. Metode abs() mengembalikan nilai positif absolut dari bilangan negatif apa pun. Misalnya, jika kita meneruskannya sebagai 0, maka hasilnya akan menjadi 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. Metode floor() mengembalikan nilai ganda yang kurang dari atau sama dengan argumen dan sama dengan bilangan bulat matematika terdekat.
System.out.println(Math.floor(-1.2));
OUTPUT: -2.0
System.out.println(Math.floor(1.2));
OUTPUT: 2.0
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION