侧边栏壁纸
博主头像
惊羽博主等级

hi ,我是惊羽,前生物学逃兵,现系统工程沉迷者 . 贝壳签约工程师 , 曾被雇佣为 联拓数科 · 支付研发工程师 、京东 · 京东数科 · 研发工程师、中国移动 · 雄安产业研究院 · 业务中台技术负责人 .

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

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

惊羽
2021-06-24 / 0 评论 / 0 点赞 / 324 阅读 / 1,263 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-09-03,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

题目

给出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
广告 广告

评论区