문제가 생겼습니다. 푸시 및 팝 작업으로 스택을 구현해야합니다.Stack을 구현하는 효율적인 알고리즘은 무엇입니까?
입력
입력 파이 르의 인터넷 RST 라인은 하나의 정수 N (1 <= N <= 10^6)
포함 - 테스트 케이스의 수.
다음 N 줄은 작업에 대해 알려줍니다. +
은 밀기를 의미합니다. -
은 팝을 의미합니다. 나는 팝 된 요소를 인쇄해야합니다.
Example
Input Output
6
+ 1 10
+ 10 1234
-
+ 2
+ 1234
-
가 나는 코드
public class Main {
public static void main(String[] args) throws FileNotFoundException {
Scanner sc = new Scanner(new File("stack.in"));
PrintWriter pw = new PrintWriter(new File("stack.out"));
int n=sc.nextInt();
int[] stack = new int[n]; int i=0;
while(n-->0) {
String s = sc.next();
if(s.equals("+")) {
stack[i++]=sc.nextInt();
} else {
pw.println(stack[--i]);
}
}
sc.close(); pw.close();
}
}
이 프로그램은 시간 제한이을 초과 저를주고 다음 작성했습니다. 이 문제를 해결하는 효율적인 알고리즘을 제안하십시오. 엄지 손가락의
Time limit: 2 seconds
Memory limit: 256 megabytes
스택은 괜찮습니다. 문제는 IO의 어딘가에 있습니다. 어쩌면 스캐너가 느린거야? 처음에는 int를 변환하는 대신 문자열을 저장하기 시작할 수 있습니다. –
자바 컬렉션을 C++ STL과 유사하게 사용해보세요. 그냥 google이에요 – NeoR
@Antonin, int [] 대신 String []?을 사용 하시겠습니까? 나는 그 방법으로도 노력했다. –