您的位置:首页 > 其它

Zigzag Iterator 解答

2015-10-22 08:26 375 查看

Question

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?

Solution

This solution is suitable for k vectors.

public class ZigzagIterator {
private List<Iterator> list;

public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
list = new ArrayList<Iterator>();
if (v1.iterator().hasNext())
list.add(v1.iterator());
if (v2.iterator().hasNext())
list.add(v2.iterator());
}

public int next() {
Iterator<Integer> current = list.remove(0);
int result = current.next();
if(current.hasNext())
list.add(current);
return result;
}

public boolean hasNext() {
return list.size() > 0 ? true : false;
}
}

/**
* Your ZigzagIterator object will be instantiated and called as such:
* ZigzagIterator i = new ZigzagIterator(v1, v2);
* while (i.hasNext()) v[f()] = i.next();
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: