题解 | #首尾交替出队#

首尾交替出队

http://www.nowcoder.com/practice/4acc8bb985b84b68b935ce26c8f4d1b9

题意整理。

  • 从一队学生中,队头队尾交替抽取。

方法一(队列)

1.解题思路

  • 首先将所有的学生加入到双端队列。
  • 模拟队头队尾交替抽取的过程。

动图展示: alt

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,总共有2n2*n次入队和出队操作,所以时间复杂度为O(n)O(n)
  • 空间复杂度:需要额外大小为n的双端队列,所以空间复杂度为O(n)O(n)
xqxls的题解 文章被收录于专栏

牛客题解

全部评论

相关推荐

牛客101244697号:这个衣服和发型不去投偶像练习生?
点赞 评论 收藏
分享
评论
8
收藏
分享
牛客网
牛客企业服务