侧边栏壁纸
博主头像
buukle博主等级

布壳儿

  • 累计撰写 106 篇文章
  • 累计创建 15 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

算法练习(17) - 锯齿迭代器

administrator
2021-06-24 / 0 评论 / 0 点赞 / 391 阅读 / 1382 字

题目

给出n个一维的向量,请你实现一个迭代器,交替返回它们中间的元素。

示例:

输入:
v1 = [1,2]
v2 = [3,4,5,6]
输出:
[1,3,2,4,5,6]

题解

import java.util.Iterator;
import java.util.LinkedList;

public class UpDownIterator implements Iterator {

    LinkedList<Integer> queue = new LinkedList<>();

    public UpDownIterator(int[]  ... arrs) {

        // 计算最大的数组长度
        int maxLength = 0;
        for (int j = 0; j< arrs.length; j++) {
            maxLength = Math.max(arrs[j].length,maxLength);
        }
        // 使用最大的数组长度作为边界,竖着开始遍历二维数组
        for (int i = 0; i < maxLength; i++) {
            for (int j = 0; j< arrs.length; j++) {
                // i 在小于 一维数组的长度情况下,将该坐标的值放进队列中
                if( i < arrs[j].length){
                    queue.offer(arrs[j][i]);
                }
            }
        }
    }

    public static void main(String[] args) {

        int[] v1 = { 1,2};
        int[] v2 = { 3,4,0};
        int[] v3 = { 5,6};

        UpDownIterator upDownIterator = new UpDownIterator(v1,v2,v3);
        while(upDownIterator.hasNext()){
            System.out.println(upDownIterator.next());
        }
    }

    @Override
    public boolean hasNext() {
        return !queue.isEmpty();
    }

    @Override
    public Object next() {
        return queue.pop();
    }
}
0

评论区