标签:Iterator turns Zigzag public II vecs its ZigzagIterator2
Description
Follow up Zigzag Iterator: What if you are givenk
1d vectors? How well can your code be extended to such cases? 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".
Example
Example1
Input: k = 3
vecs = [
[1,2,3],
[4,5,6,7],
[8,9],
]
Output: [1,4,8,2,5,9,3,6,7]
Example2
Input: k = 3 vecs = [ [1,1,1] [2,2,2] [3,3,3] ] Output: [1,2,3,1,2,3,1,2,3]
思路:
用k个指针维护每个数组的当前最靠前的元素,循环枚举这k个指针,每次枚举到就在答案序列中将该数加入,如果指针到了该数组的尾部,那么就不作处理
public class ZigzagIterator2 { public List<Iterator<Integer>> its; public int turns; /** * @param vecs a list of 1d vectors */ public ZigzagIterator2(List<List<Integer>> vecs) { // initialize your data structure here. this.its = new ArrayList<Iterator<Integer>>(); for (List<Integer> vec : vecs) { if (vec.size() > 0) its.add(vec.iterator()); } turns = 0; } public int next() { // Write your code here int elem = its.get(turns).next(); if (its.get(turns).hasNext()) turns = (turns + 1) % its.size(); else { its.remove(turns); if (its.size() > 0) turns %= its.size(); } return elem; } public boolean hasNext() { // Write your code here return its.size() > 0; } } /** * Your ZigzagIterator2 object will be instantiated and called as such: * ZigzagIterator2 solution = new ZigzagIterator2(vecs); * while (solution.hasNext()) result.add(solution.next()); * Output result */
标签:Iterator,turns,Zigzag,public,II,vecs,its,ZigzagIterator2 来源: https://www.cnblogs.com/FLAGyuri/p/12078563.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。