Menerapkan tumpukan menggunakan antrian
Sumber: Hackernoon Isi artikel ini dikhususkan untuk memecahkan masalah implementasi tumpukan hanya dengan menggunakan dua antrian. Kami 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:
Detil tambahan:
Contoh 1: Memasukkan
Keluaran
[batal, batal, batal, 2, 2, salah]
Penjelasan
|
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. Bagian 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
GO TO FULL VERSION