题意整理。
- 从一队学生中,队头队尾交替抽取。
方法一(队列)
1.解题思路
- 首先将所有的学生加入到双端队列。
- 模拟队头队尾交替抽取的过程。
动图展示:
2.代码实现
import java.util.ArrayDeque;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
ArrayDeque deque = new ArrayDeque();
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String name = scanner.next();
// 初始化队列中的数据
deque.offerLast(name);
}
//只要队列大小大于2,不断从队头队尾打印学生名字
while(deque.size()>=2){
System.out.println(deque.pollFirst());
System.out.println(deque.pollLast());
}
//如果队列中还有学生,则必定只有一个学生,直接打印其名字
if(deque.size()>0){
System.out.println(deque.pollFirst());
}
}
}
3.复杂度分析
- 时间复杂度:假设学生数为n,总共有次入队和出队操作,所以时间复杂度为。
- 空间复杂度:需要额外大小为n的双端队列,所以空间复杂度为。