题目:

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

链接: http://leetcode.com/problems/zigzag-iterator/

题解:

Zigzag Iterator。最简单的就是用两个index分别遍历两个list,然后用一个boolean变量来控制何时遍历哪一个list。 好像我这么做是有问题的,应该用Interator<>来做。

Time Complexity - O(n), Space Complexity - O(1)

public class ZigzagIterator {
private int length;
private int index1 = 0;
private int index2 = 0;
private List<Integer> list1;
private List<Integer> list2;
private boolean useList2; public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
this.length = v1.size() + v2.size();
list1 = v1;
list2 = v2;
if(list1.size() == 0) {
useList2 = true;
}
} public int next() {
if(!useList2) {
if(index2 < list2.size()) {
useList2 = true;
}
return list1.get(index1++);
} else {
if(index1 < list1.size()) {
useList2 = false;
}
return list2.get(index2++);
} } public boolean hasNext() {
return (index1 + index2) < length;
}
} /**
* Your ZigzagIterator object will be instantiated and called as such:
* ZigzagIterator i = new ZigzagIterator(v1, v2);
* while (i.hasNext()) v[f()] = i.next();
*/

Reference:

https://leetcode.com/discuss/57961/o-n-time-%26-o-1-space-java-solution

https://leetcode.com/discuss/63037/simple-java-solution-for-k-vector

https://leetcode.com/discuss/58012/short-java-o-1-space

https://leetcode.com/discuss/71857/clean-java-solution-works-for-k-lists

最新文章

  1. JavaScript实现DOM对象选择器
  2. Android中使用ShareSDK集成分享功能
  3. mysql常用函数
  4. 通过Canvas + JS 实现简易时钟实战
  5. C语言中printf的规范输出
  6. iOS开发学习概述及知识整理
  7. CSS预处理器Sass、LESS 和 Stylus
  8. Oracle12C相关
  9. mm/mmap.c
  10. R&amp;S学习笔记(一)
  11. 一、IOS运行原理
  12. 每天一个linux命令(35):killall命令
  13. 每天一个linux命令(21):tar命令
  14. vi 每日练习
  15. jaspersoft 5.6.0 相关问题
  16. 安卓常用 widget
  17. [HDOJ2572]终曲
  18. PyQt5之窗口类型
  19. python之vscode配置开发调试环境
  20. ECMAScript 6 -- 数组的解构赋值

热门文章

  1. QT对话框设计
  2. WebSocket学习
  3. 【吐血推荐】简要分析unity3d中剪不断理还乱的yield
  4. 提取html中的src 路径
  5. HTML5表单学习笔记
  6. bzoj 2743 树状数组离线查询
  7. hdu 1548 A strange lift 宽搜bfs+优先队列
  8. Basic knowledge of html (keep for myself)
  9. Python3中的新特性(1)——新的语言特性
  10. VS调试Libevent流程