Melaksanakan timbunan menggunakan baris gilir
Sumber: Hackernoon Kandungan artikel ini dikhaskan untuk menyelesaikan masalah melaksanakan timbunan menggunakan hanya dua baris gilir. Kami mempunyai masalah dengan Leetcode :
Laksanakan tindanan masuk dahulu keluar terakhir (LIFO) menggunakan hanya dua baris gilir. Tindanan yang dilaksanakan mesti menyokong semua fungsi tindanan biasa ( tolak , atas , pop dan kosong ). Laksanakan kelas MyStack:
Maklumat tambahan:
Contoh 1: Input
Pengeluaran
[null, null, null, 2, 2, false]
Penjelasan
|
Penyelesaian masalah
Pilihan pertama
Dalam penyelesaian pertama kami 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 baris gilir tambahan untuk penyelesaian ini. Mari kita mulakan dengan push . Untuk operasi tolak , kami hanya menambah elemen baharu pada baris gilir semasa kami.
public void push(int x) {
current.add(x);
}
Helah utama di sini ialah kaedah pop . Di sini kami meletakkan semua elemen kecuali yang terakhir ke dalam baris gilir tmp . Dan kini elemen terakhir dalam baris gilir menjadi elemen pertama yang dihantar.
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 kaedah teratas ? Kaedah ini serupa 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 kaedah kosong terakhir , kita hanya perlu menyemak baris gilir semasa:
public boolean empty() {
return current.isEmpty();
}
Penyelesaian kedua
Dalam pilihan ini kami tidak akan menggunakan memori tambahan:static class MyStack {
private Queue<Integer> current;
public MyStack2() {
current = new ArrayDeque<>();
}
}
Idea utama di sini ialah kaedah tolak . Kami menambah elemen semasa dan kemudian memindahkan elemen sebelum yang semasa ke penghujung baris gilir. Sebagai contoh, jika kita mempunyai baris gilir dengan elemen [2,1], kita menggunakan push 3 - dan dapatkan baris gilir [3,2,1], kemudian [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 mempunyai elemen yang betul dan permulaan baris gilir untuk semua kaedah lain.
public int pop() {
return current.poll();
}
public int top() {
return current.peek();
}
public boolean empty() {
return current.isEmpty();
}
Kaedah kelas Matematik Java
Sumber: Sederhana Dalam siaran ini, anda akan mempelajari tentang keupayaan dan skop kelas Matematik Java. Sebahagian daripada pakej Java.lang.Math dalam bahasa Java ialah kelas Math . Kelas ini memberikan kami beberapa kaedah yang dipratentukan seperti min , max , sqrt dan lain-lain. Di bawah adalah contoh beberapa kaedah dari kelas Matematik yang boleh kita gunakan dalam kerja harian kita. 1. Kaedah max() mengembalikan bilangan yang lebih besar yang diluluskan dalam parameter:System.out.println(Math.max(5,3));
OUTPUT: 5
2. Kaedah sqrt() akan menunjukkan kepada kita punca kuasa dua nombor yang diluluskan sebagai hujah:
System.out.println(Math.sqrt(4));
OUTPUT: 2.0
3. Kaedah rawak() mengembalikan nombor rawak dalam julat dari 0 hingga 1.
System.out.println(Math.random());
OUTPUT: 0.8685304957692445
4. Kaedah abs() mengembalikan nilai positif mutlak sebarang nombor negatif. Sebagai contoh, jika kita melepasinya sebagai 0, ia akan mengembalikan 0 sebagai hasilnya.
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. Kaedah floor() mengembalikan nilai berganda yang kurang daripada atau sama dengan hujah dan sama dengan integer matematik 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