Zigzag Iterator

来源:互联网 发布:批量word转pdf windows 编辑:程序博客网 时间:2024/06/05 15:04

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

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].

java

并不是最优解,后续会添加

public class ZigzagIterator {    /*    * @param v1: A 1d vector    * @param v2: A 1d vector    */    Queue<Integer> queue;    public ZigzagIterator(List<Integer> v1, List<Integer> v2) {        // do intialization if necessary        queue = new LinkedList<Integer>();        for (int i = 0; i < Math.min(v1.size(), v2.size()); i++) {            queue.offer(v1.get(i));            queue.offer(v2.get(i));        }        if (v1.size() > v2.size()) {            for (int i = v2.size(); i < v1.size(); i++) {                queue.offer(v1.get(i));            }        } else {            for (int i = v1.size(); i < v2.size(); i++) {                queue.offer(v2.get(i));            }        }    }    /*     * @return: An integer     */    public int next() {        // write your code here        return queue.poll();    }    /*     * @return: True if has next     */    public boolean hasNext() {        // write your code here        return !queue.isEmpty();    }}/** * Your ZigzagIterator object will be instantiated and called as such: * ZigzagIterator solution = new ZigzagIterator(v1, v2); * while (solution.hasNext()) result.add(solution.next()); * Output result */

另外解法
public class ZigzagIterator {    /*    * @param v1: A 1d vector    * @param v2: A 1d vector    */    Iterator<Integer> it1;    Iterator<Integer> it2;    int count = 0;    public ZigzagIterator(List<Integer> v1, List<Integer> v2) {        // do intialization if necessary        it1 = v1.iterator();        it2 = v2.iterator();        count = 0;    }    /*     * @return: An integer     */    public int next() {        // write your code here        int val = 0;        if (count % 2 == 0 && it1.hasNext() && it2.hasNext()) {            val = it1.next();        } else if (count % 2 != 0 && it2.hasNext() && it1.hasNext()) {            val = it2.next();        } else {            return it1.hasNext() ? it1.next() : it2.next();        }        count++;        return val;    }    /*     * @return: True if has next     */    public boolean hasNext() {        // write your code here        return it1.hasNext() || it2.hasNext();    }}/** * Your ZigzagIterator object will be instantiated and called as such: * ZigzagIterator solution = new ZigzagIterator(v1, v2); * while (solution.hasNext()) result.add(solution.next()); * Output result */


原创粉丝点击