zoukankan      html  css  js  c++  java
  • LeetCode Zigzag Iterator

    原题链接在这里:https://leetcode.com/problems/zigzag-iterator/

    题目:

    Given two 1d vectors, implement an iterator to return their elements alternately.

    For example, given two 1d vectors:

    v1 = [1, 2]
    v2 = [3, 4, 5, 6]

    By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1, 3, 2, 4, 5, 6].

    Follow up: What if you are given k 1d vectors? How well can your code be extended to such cases?

    Clarification for the follow up question - Update (2015-09-18):
    The "Zigzag" order is not clearly defined and is ambiguous for k > 2 cases. If "Zigzag" does not look right to you, replace "Zigzag" with "Cyclic". For example, given the following input:

    [1,2,3]
    [4,5,6,7]
    [8,9]
    

    It should return [1,4,8,2,5,9,3,6,7].

    题解:

    用queue来保存每个list的iterator. next() 是 poll 出que的第一个iterator, return iterator.next(), 若是该iterator还有next, 就再放到queue尾部.

    若queue空了,说明都遍历过了,此时hasNext()就返回false.

    Time Complexity: next, O(1). hasNext, O(1). Space: O(l), l 是list的个数.

    AC Java:

     1 public class ZigzagIterator {
     2     LinkedList<Iterator<Integer>> que;
     3     public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
     4         que = new LinkedList<Iterator<Integer>>();
     5         if(v1.iterator().hasNext()){
     6             que.add(v1.iterator());
     7         }
     8         if(v2.iterator().hasNext()){
     9             que.add(v2.iterator());
    10         }
    11     }
    12 
    13     public int next() {
    14         Iterator<Integer> it = que.poll();
    15         int cur = it.next();
    16         if(it.hasNext()){
    17             que.add(it);
    18         }
    19         return cur;
    20     }
    21 
    22     public boolean hasNext() {
    23         return !que.isEmpty();
    24     }
    25 }
    26 
    27 /**
    28  * Your ZigzagIterator object will be instantiated and called as such:
    29  * ZigzagIterator i = new ZigzagIterator(v1, v2);
    30  * while (i.hasNext()) v[f()] = i.next();
    31  */

    类似Flatten 2D Vector.

  • 相关阅读:
    55. 跳跃游戏
    45. 跳跃游戏 II
    对称的二叉树
    字符型图片验证码,使用tensorflow实现卷积神经网络,进行验证码识别CNN
    python版本升级及pip部署方法
    Two Sum [easy] (Python)
    工作中常用的linux命令(持续更新)
    PAT-1001. 害死人不偿命的(3n+1)猜想 (15)
    C++二维数组的动态声明
    19. Remove Nth Node From End of List(C++,Python)
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/5243896.html
Copyright © 2011-2022 走看看