Pagpapatupad ng stack gamit ang isang queue
Pinagmulan: Hackernoon Ang nilalaman ng artikulong ito ay nakatuon sa paglutas ng problema ng pagpapatupad ng isang stack gamit lamang ang dalawang pila. Mayroon kaming problema sa Leetcode :
Magpatupad ng last-in-first-out (LIFO) stack gamit lang ang dalawang queue. Dapat suportahan ng ipinatupad na stack ang lahat ng mga function ng isang regular na stack ( push , top , pop , at empty ). Ipatupad ang klase ng MyStack:
Mga karagdagang detalye:
Halimbawa 1: Input
Output
[null, null, null, 2, 2, false]
Paliwanag
|
Ang solusyon sa problema
Unang pagpipilian
Sa unang solusyon ay gagamit kami ng karagdagang memorya:static class MyStack {
private Queue<Integer> current;
private Queue<Integer> tmp;
public MyStack() {
current = new ArrayDeque<>();
tmp = new ArrayDeque<>();
}
Kailangan namin ng karagdagang pila para sa solusyon na ito. Magsimula tayo sa push . Para sa isang push operation , nagdaragdag lang kami ng bagong elemento sa aming kasalukuyang pila.
public void push(int x) {
current.add(x);
}
Ang pangunahing lansihin dito ay ang pop method . Dito namin inilalagay ang lahat ng elemento maliban sa huli sa tmp queue . At ngayon ang huling elemento sa pila ay nagiging unang elementong ipinadala.
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;
}
Paano ang tungkol sa nangungunang pamamaraan ? Ang pamamaraang ito ay katulad ng 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;
}
At para sa huling walang laman na paraan , dapat lang nating suriin ang kasalukuyang pila:
public boolean empty() {
return current.isEmpty();
}
Pangalawang solusyon
Sa opsyong ito hindi kami gagamit ng karagdagang memorya:static class MyStack {
private Queue<Integer> current;
public MyStack2() {
current = new ArrayDeque<>();
}
}
Ang pangunahing ideya dito ay ang paraan ng pagtulak . Idinaragdag namin ang kasalukuyang elemento at pagkatapos ay ilipat ang mga elemento bago ang kasalukuyang elemento sa dulo ng pila. Halimbawa, kung mayroon kaming pila na may mga elemento [2,1], ginagamit namin ang push 3 - at makakuha ng queue [3,2,1], pagkatapos ay [1,3,2], [2,1,3] at. .. at lahat.
public void push(int x) {
current.add(x);
int size = current.size();
for (int i = 0; i < size-1; i ++){
current.add(current.poll());
}
}
Narito mayroon na tayong tamang elemento at simula ng pila para sa lahat ng iba pang pamamaraan.
public int pop() {
return current.poll();
}
public int top() {
return current.peek();
}
public boolean empty() {
return current.isEmpty();
}
Mga pamamaraan ng klase ng Java Math
Source: Medium Sa post na ito, malalaman mo ang tungkol sa mga kakayahan at saklaw ng klase ng Java Math. Bahagi ng Java.lang.Math package sa Java language ang Math class . Ang klase na ito ay nagbibigay sa amin ng ilang paunang natukoy na mga pamamaraan tulad ng min , max , sqrt at iba pa. Nasa ibaba ang mga halimbawa ng ilang pamamaraan mula sa klase sa Math na magagamit natin sa ating pang-araw-araw na gawain. 1. Ibinabalik ng max() na pamamaraan ang mas malaking numerong ipinasa sa parameter:System.out.println(Math.max(5,3));
OUTPUT: 5
2. Ang sqrt() method ay magpapakita sa amin ng square root ng numerong ipinasa bilang argumento:
System.out.println(Math.sqrt(4));
OUTPUT: 2.0
3. Ang random() na paraan ay nagbabalik ng random na numero sa hanay mula 0 hanggang 1.
System.out.println(Math.random());
OUTPUT: 0.8685304957692445
4. Ang abs() na pamamaraan ay nagbabalik ng ganap na positibong halaga ng anumang negatibong numero. Halimbawa, kung ipapasa natin ito bilang 0, babalik ito ng 0 bilang resulta.
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. Ang floor() method ay nagbabalik ng double value na mas mababa sa o katumbas ng argument at katumbas ng pinakamalapit na mathematical integer.
System.out.println(Math.floor(-1.2));
OUTPUT: -2.0
System.out.println(Math.floor(1.2));
OUTPUT: 2.0
GO TO FULL VERSION