题目大概意思就是模拟队列,这个很简单
对我这种菜鸟来说,每次遇到这种题,按照格式进行输入输出是最耗时间的,所以我决定记录下我的解决办法。
题目要求:
输入“TOP”以后,如果没有可以查看的数,返回-1
输入"POP"以后,如果没有可以出栈的数,返回-1
其他操作不做要求
输入要求:
第一行是测试用例的数量
第二行是每个测试用例中的操作数
接下来就是这个测试用例中的操作
例子:
输入:
2(输入用例)
5(第一个输入用例中可以有五个操作)
PUSH 1
TOP
POP
POP
POP
4(第一个输入用例中可以有四个操作)
PUSH 2
TOP
POP
POP
输出:
(第一个输入用例的结果)
1
1
-1
(下面是第二个输入用例的结果)
2
2
-1
这里有个需要注意的地方,就是在一个输入用例中,如果出现过一次-1,表示后面的操作都是无效的,所以后面也应该都是-1,但是我们只输出一次-1
可是,这里我搞不定,如果有哪个大神能搞定,麻烦教教我,谢谢~
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
class SqQueue {
public int front;
public int rear;
public int ele[];
public SqQueue(int maxsize) {
front = rear = 0;
ele = new int[maxsize];
}
public SqQueue() {
}
public void push(int o) {
ele[rear] = o;
rear++;
}
public int top() {
return ele[front];
}
public int pop() {
int t = ele[front];
front++;
return t;
}
public int size() {
return rear - front;
}
public void clear() {
front = rear = 0;
}
}
public class Main {
public static void main(String[] args) {
SqQueue sqQueue = new SqQueue(10);
Scanner sr = new Scanner(System.in);
String testSamp = sr.nextLine();
int samp = Integer.parseInt(testSamp);
ArrayList<Integer> arr=new ArrayList<>();
for (int j = 0; j < samp; j++) {
sqQueue.rear = 0;
sqQueue.front = 0;
String s = sr.nextLine();
int a = Integer.parseInt(s.trim());
for (int i = 0; i < a; i++) {
String str = sr.nextLine();
if (str.indexOf(" ") == -1) {
switch (str) {
case "TOP":
int top=0;
if (sqQueue.size() <= 0) {
top=-1;
}else {
top=sqQueue.top();
}
arr.add(top);
break;
case "POP":
int pop=0;
if (sqQueue.size() <= 0) {
pop=-1;
}else {
pop=sqQueue.pop();
}
arr.add(pop);
break;
case "SIZE":
int size=sqQueue.size();
arr.add(size);
break;
case "CLEAR":
if (sqQueue.size() <= 0) {
int clear=-1;
}else {
sqQueue.clear();
}
break;
}
} else {
String[] afterspace = str.split(" ");
int X = Integer.parseInt(afterspace[1]);
sqQueue.push(X);
}
}
}
Iterator<Integer> iterator = arr.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}