首页 > 其他 > 详细

Zigzag Iterator

时间:2016-08-06 06:59:36      阅读:253      评论:0      收藏:0      [点我收藏+]

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

 1 public class ZigzagIterator {
 2     
 3     List<Iterator<Integer>> iters = new ArrayList<>();
 4     int count = 0;
 5 
 6     public ZigzagIterator(List<List<Integer>> lists) {
 7         for (List<Integer> v : lists) {
 8             if (!v.isEmpty()) iters.add(v.iterator());
 9         }
10     }
11 
12     public int next() {
13         int x = iters.get(count).next();
14         if (!iters.get(count).hasNext())
15             iters.remove(count);
16         else
17             count++;
18 
19         if (iters.size() != 0)
20             count %= iters.size();
21         return x;
22     }
23 
24     public boolean hasNext() {
25         return !iters.isEmpty();
26     }
27 }
28 
29 /**
30  * Your ZigzagIterator object will be instantiated and called as such:
31  * ZigzagIterator i = new ZigzagIterator(v1, v2); while (i.hasNext()) v[f()] =
32  * i.next();
33  */

 

Zigzag Iterator

原文:http://www.cnblogs.com/beiyeqingteng/p/5743239.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!