`

Google Interview - Zigzag Iterator

 
阅读更多

Suppose you have a Iterator class with has_next() and get_next() methods.

Please design and implement a ZigzagIterator class as a wrapper of two iterators.


For example, given two iterators:
i0 = [1,2,3,4]
i1 = [5,6]

ZigzagIterator it(i0, i1);

while(it.has_next()) {
    print(it.get_next());
}

The output of the above pseudocode would be [1,5,2,6,3,4].

 

Note: For Java solution we will use JDK's Iterator class, so the methods would be hasNext() and next().

 

public class ZigzagIterator {
    Iterator i0, i1;
    Iterator it;
    public ZigzagIterator(Iterator i0, Iterator i1) {
        this.i0 = i0; this.i1 = i1;
        this.it = i0.hasNext()? i0:i1;
    }
    
    public boolean has_next() {
        return it.hasNext();
    }
    
    public int get_next() {
        int val = (Integer)it.next();
        if(it == i0 && i1.hasNext())
            it = i1;
        else if(it == i1 && i0.hasNext())
            it = i0;
        return val;
    }
}

 

第二种解法,这个方便解有多个Iterator的情况,也就是followup的问题:

class ZigzagIterator {
private:
    vector<Iterator> vec;
    vector<Iterator>::iterator it;
public:
    ZigzagIterator(Iterator& i0, Iterator& i1) {
        vec = {i0, i1};
        it = vec.begin();
        while(!(*it).has_next()) it++;
    }

    bool has_next() {
        return (*it).has_next();
    }
    
    int get_next() {
        auto prev = it;
        int val = (*it).get_next();
        do {
            if(++it == vec.end())
                it = vec.begin();
        } while(!(*it).has_next() && it != prev);
        return val;
    }
};

 

分享到:
评论

相关推荐

    Boa_ZigZag_Price - MetaTrader 5脚本.zip

    《Boa_ZigZag_Price - MetaTrader 5脚本》是专为金融交易者设计的一款技术分析工具,它基于MetaTrader 5交易平台。这款脚本的核心是ZigZag指标,ZigZag是一种非常实用的技术分析工具,用于识别市场的趋势变化和价格...

    C语言-leetcode题解之06-zigzag-conversion.c

    在“C语言-leetcode题解之06-zigzag-conversion.c”这一文章中,作者将详细剖析LeetCode平台上编号为6的题目,也就是“ZigZag Conversion(之字形转换)”问题,并提供一个用C语言实现的解决方案。 ZigZag ...

    c语言-leetcode 0006-zigzag-conversion.zip

    c c语言_leetcode 0006_zigzag_conversion.zip

    java-leetcode题解之006-ZigZag-Conversion

    java入门 java_leetcode题解之006_ZigZag_Conversion

    python-leetcode题解之103-Binary-Tree-Zigzag-Level-Order-Traversal

    今天我们将详细讨论Python实现LeetCode第103题——二叉树的锯齿形层序遍历(Binary Tree Zigzag Level Order Traversal)的解决方案。 二叉树的锯齿形层序遍历要求我们以不同于传统层序遍历的方式输出树节点值,即...

    c语言-leetcode题解之1372-longest-zigzag-path-in-a-binary-tree

    c语言入门 c语言_leetcode题解之1372_longest_zigzag_path_in_a_binary_tree

    js-leetcode题解之103-binary-tree-zigzag-level-order-traversal.js

    在本篇文章中,我们将深入探讨JavaScript编程语言用于解决LeetCode上的103号题目,即“二叉树的锯齿形层序遍历”。该题要求使用JavaScript编写一个函数,实现对给定二叉树进行层序遍历,但要求按照“Z”形的顺序输出...

    js-leetcode题解之6-zigzag-conversion.js

    本篇将要讨论的题目是LeetCode的第6题“ZigZag Conversion”。这是一个字符串操作问题,其主要目的是将给定的字符串按照一种特殊的“之”字形排列方式进行转换。具体来说,例如输入字符串“PAYPALISHIRING”和数字3...

    zigzag代码matlab-Zigzag:基于Matlab的Z字形扫描算法

    zigzag代码matlab 之字形 基于Matlab的JPEG算法中的Z字形扫描 之字形扫描 量化后,DC 系数与 63 个 AC 系数分开处理。 DC 系数是原始 64 个图像样本的平均值的度量。 由于相邻 8×8 块的 DC 系数之间通常存在很强的...

    ZigzagPoints - 指标 Zigzag 测量方法的脚本 - MetaTrader 4脚本.zip

    本文将详细介绍一种名为“ZigzagPoints”的MT4脚本,该脚本旨在帮助交易者量化并分析Zigzag指标的关键点位。 Zigzag指标,又称锯齿形指标,是一种简单但有效的技术分析工具,用于识别市场的主要趋势变化。它通过...

    leetcode2-zigzag_conversion:代码挑战:ZigZag转换

    leetcode 2 代码挑战 之字形转换 字符串"PAYPALISHIRING"在给定的行数上以锯齿形图案书写,如下所示:(您可能希望以固定字体显示此图案以获得更好的可读性) P A H N A ...编写将接受一个字符串并在给定行数的情况下...

    Exp_RSI - MetaTrader 5EA.zip

    《基于RSI指标的MetaTrader 5 EA交易详解》 在金融市场的自动化交易领域,MetaTrader 5(MT5)交易平台因其强大的功能和广泛的使用而备受推崇。"Exp_RSI - MetaTrader 5 EA.zip"这个压缩包文件,提供了一个基于相对...

    Spin filtering and large magnetoresistance behaviors in carbon chain-zigzag graphene nanoribbon nanojunctions

    s function method combined with the density functional theory, we investigate the electron and spin transport properties of carbon chains covalently connected with zigzag-edged graphene electrodes at ...

    zigzag算法_matlab实现

    Zigzag编码是一种在图像压缩领域中常用的扫描方法,它主要应用于无损压缩技术,如JPEG-LS和某些变种的JPEG。这种编码方式通过不规则的顺序访问像素来减少相邻像素之间的相关性,从而提高数据的压缩效率。在MATLAB中...

    zigzag算法的python版本

    Zigzag算法是一种在图像处理领域常见的扫描方法,特别是在JPEG压缩和解压缩中起到关键作用。这个算法的主要目的是为了按照特定顺序访问图像的像素,从而有效地进行数据编码和传输。在Python中实现zigzag算法,我们...

    ZigZag - MetaTrader 5脚本.zip

    《MetaTrader 5中的ZigZag指标详解》 ZigZag,又称之为“之字转向”或“锯齿形”,是一种在金融市场技术分析中广泛应用的技术指标。它通过连接价格走势中的显著高点和低点,形成一系列的线段,帮助交易者识别市场的...

    Algorithm-interview.zip

    本压缩包"Algorithm-interview.zip"聚焦于算法在面试中的应用,旨在帮助求职者提升算法理解和解决问题的能力,以应对技术面试中的挑战。 1. **算法基础**:在面试中,对基础算法的理解是必不可少的。这包括排序算法...

    ZIGZAG突破交易策略_V1_zigzag指标_Zigzag突破开仓策略_源码.rar.rar

    ZIGZAG突破交易策略是一种基于技术分析的交易方法,主要利用Zigzag指标来识别市场中的价格趋势变化,尤其适用于具有明显趋势的市场环境。Zigzag指标,也称为锯齿形指标,是一个简单的图表工具,用于过滤市场的短期...

    Varint+ZigZag解码 ZigZag编码

    实现Varint + ZigZag的编解码过程,里面有我自己对Vint编解码实现的算法 ,VInt编码为Varint编码和ZigZag编码的结合,为一种将64位二进制编码的有符号整型编码在最多10字节中的编码方式。Varint编码为一种将64位二...

    zzf智能交易使用 ZIGZAG-FRACTALS 在小时时间图表中先前柱的 high-low 预测当天趋势2

    zzf智能交易使用 ZIGZAG-FRACTALS 在小时时间图表中先前柱的 high-low 预测当天趋势2

Global site tag (gtag.js) - Google Analytics