Ngleksanakake tumpukan nggunakake antrian
Sumber: Hackernoon Isi artikel iki dikhususake kanggo ngrampungake masalah ngleksanakake tumpukan mung nggunakake rong antrian. Kita duwe masalah karo Leetcode :
Ngleksanakake tumpukan last-in-first-out (LIFO) mung nggunakake rong antrian. Tumpukan sing dileksanakake kudu ndhukung kabeh fungsi tumpukan biasa ( push , top , pop , lan kosong ). Ngleksanakake kelas MyStack:
Rincian tambahan:
Tuladha 1: Input
Output
[null, null, null, 2, 2, false]
Panjelasan
|
Solusi saka masalah
Pilihan pisanan
Ing solusi pisanan kita bakal nggunakake memori tambahan:static class MyStack {
private Queue<Integer> current;
private Queue<Integer> tmp;
public MyStack() {
current = new ArrayDeque<>();
tmp = new ArrayDeque<>();
}
We kudu antrian tambahan kanggo solusi iki. Ayo dadi miwiti karo push . Kanggo operasi push , kita mung nambah unsur anyar menyang antrian saiki.
public void push(int x) {
current.add(x);
}
Trik utama ing kene yaiku metode pop . Ing kene kita sijine kabeh unsur kajaba sing pungkasan menyang antrian tmp . Lan saiki unsur pungkasan ing antrian dadi unsur pisanan 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;
}
Kepiye babagan metode ndhuwur ? Cara iki padha karo 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;
}
Lan kanggo metode kosong pungkasan , kita mung kudu mriksa antrian saiki:
public boolean empty() {
return current.isEmpty();
}
Solusi kapindho
Ing pilihan iki, kita ora bakal nggunakake memori tambahan:static class MyStack {
private Queue<Integer> current;
public MyStack2() {
current = new ArrayDeque<>();
}
}
Ide utama ing kene yaiku metode push . Kita nambah unsur saiki banjur mindhah unsur sadurunge sing saiki menyang mburi antrian. Contone, yen kita duwe antrian karo unsur [2,1], kita nggunakake push 3 - lan njaluk antrian [3,2,1], banjur [1,3,2], [2,1,3] lan. .. lan Kabeh.
public void push(int x) {
current.add(x);
int size = current.size();
for (int i = 0; i < size-1; i ++){
current.add(current.poll());
}
}
Ing kene kita wis duwe unsur sing bener lan wiwitan antrian kanggo kabeh cara liyane.
public int pop() {
return current.poll();
}
public int top() {
return current.peek();
}
public boolean empty() {
return current.isEmpty();
}
Metode kelas Matematika Jawa
Sumber: Sedheng Ing kirim iki, sampeyan bakal sinau babagan kemampuan lan ruang lingkup kelas Matematika Jawa. Bagean paket Java.lang.Math ing basa Jawa yaiku kelas Matematika . Kelas iki nyedhiyakake sawetara cara sing wis ditemtokake kaya min , max , sqrt lan liya-liyane. Ing ngisor iki ana conto sawetara metode saka kelas Matematika sing bisa digunakake ing karya saben dina. 1. Metode max () ngasilake jumlah sing luwih gedhe liwat parameter:System.out.println(Math.max(5,3));
OUTPUT: 5
2. Metode sqrt () bakal nuduhake akar kuadrat saka nomer sing diterusake minangka argumen:
System.out.println(Math.sqrt(4));
OUTPUT: 2.0
3. Cara acak () ngasilake nomer acak ing sawetara saka 0 kanggo 1.
System.out.println(Math.random());
OUTPUT: 0.8685304957692445
4. Cara abs () ngasilake nilai positif absolut saka sembarang nomer negatif. Contone, yen kita pass minangka 0, bakal bali 0 minangka asil.
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. Cara lantai () ngasilake nilai ganda sing kurang saka utawa padha karo argumen lan padha karo integer matematika sing paling cedhak.
System.out.println(Math.floor(-1.2));
OUTPUT: -2.0
System.out.println(Math.floor(1.2));
OUTPUT: 2.0
GO TO FULL VERSION