큐를 사용하여 스택 구현
출처: Hackernoon 이 기사의 내용은 두 개의 큐만 사용하여 스택을 구현하는 문제를 해결하는 데 전념합니다. Leetcode에 문제가 있습니다 .
두 개의 대기열만 사용하여 LIFO(후입선출) 스택을 구현합니다. 구현된 스택은 일반 스택의 모든 기능( push , top , pop 및 empty )을 지원해야 합니다. MyStack 클래스를 구현합니다.
추가 세부 사항:
예시 1: 입력
산출
[널, 널, 널, 2, 2, 거짓]
설명
|
문제의 해결
첫 번째 옵션
첫 번째 솔루션에서는 추가 메모리를 사용합니다.static class MyStack {
private Queue<Integer> current;
private Queue<Integer> tmp;
public MyStack() {
current = new ArrayDeque<>();
tmp = new ArrayDeque<>();
}
이 솔루션에는 추가 대기열이 필요합니다. push 부터 시작해 보겠습니다 . 푸시 작업 의 경우 현재 대기열에 새 요소를 추가하기만 하면 됩니다.
public void push(int x) {
current.add(x);
}
여기서 주요 트릭은 pop 메소드입니다 . 여기에서는 마지막 요소를 제외한 모든 요소를 tmp 대기열 에 넣습니다 . 이제 대기열의 마지막 요소가 전송된 첫 번째 요소가 됩니다.
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;
}
최고의 방법은 어떻습니까 ? 이 방법은 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;
}
그리고 마지막 빈 메소드에 대해서는 간단히 현재 큐를 확인해야 합니다.
public boolean empty() {
return current.isEmpty();
}
두 번째 해결책
이 옵션에서는 추가 메모리를 사용하지 않습니다.static class MyStack {
private Queue<Integer> current;
public MyStack2() {
current = new ArrayDeque<>();
}
}
여기서 주요 아이디어는 push 메소드입니다 . 현재 요소를 추가한 다음 현재 요소 이전의 요소를 대기열의 끝으로 이동합니다. 예를 들어 요소 [2,1]이 포함된 큐가 있는 경우 push 3을 사용하여 큐 [3,2,1]을 가져온 다음 [1,3,2], [2,1,3]을 가져옵니다. .. 그리고 다.
public void push(int x) {
current.add(x);
int size = current.size();
for (int i = 0; i < size-1; i ++){
current.add(current.poll());
}
}
여기에는 다른 모든 메서드에 대한 올바른 요소와 대기열의 시작이 이미 있습니다.
public int pop() {
return current.poll();
}
public int top() {
return current.peek();
}
public boolean empty() {
return current.isEmpty();
}
Java 수학 클래스 메소드
출처: Medium 이 게시물에서는 Java Math 클래스의 기능과 범위에 대해 알아봅니다. Java 언어의 Java.lang.Math 패키지 의 일부는 Math 클래스입니다 . 이 클래스는 min , max , sqrt 등과 같은 미리 정의된 몇 가지 메서드를 제공합니다 . 다음은 일상 작업에서 사용할 수 있는 Math 클래스 의 일부 메서드 예입니다 . 1. max() 메소드는 매개변수에 전달된 더 큰 숫자를 반환합니다.System.out.println(Math.max(5,3));
OUTPUT: 5
2. sqrt() 메소드는 인수로 전달된 숫자의 제곱근을 표시합니다.
System.out.println(Math.sqrt(4));
OUTPUT: 2.0
3. random() 메소드는 0에서 1 사이의 난수를 반환합니다.
System.out.println(Math.random());
OUTPUT: 0.8685304957692445
4. abs() 메서드는 음수의 절대 양수 값을 반환합니다. 예를 들어 0으로 전달하면 결과적으로 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. Floor() 메서드는 인수보다 작거나 같고 가장 가까운 수학 정수와 같은 double 값을 반환합니다.
System.out.println(Math.floor(-1.2));
OUTPUT: -2.0
System.out.println(Math.floor(1.2));
OUTPUT: 2.0
GO TO FULL VERSION