LeetCode 281. Zigzag Iterator
来源:互联网 发布:照片合成软件 编辑:程序博客网 时间:2024/06/06 19:09
#include <vector>#include <iostream>using namespace std;/* 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] return [1, 3, 2, 4, 5, 6]*/class ZigzagIterator {private: int index; vector<int> zigzagOrder; public ZigzagIterator(vector<int>& v1, vector<int>& v2) { int i = 0, j = 0; bool turn = true; while(i < v1.size() && j < v2.size()) { if(turn) { zigzagOrder.push_back(v1[i++]); } else { zigzagOrder.push_back(v2[j++]); } turn = !turn; } while(i < v1.size()) { zigzagOrder.push_back(v1[i++]); } while(j < v2.size()) { zigzagOrder.push_back(v2[j++]); } } bool hasNext() { return index < zigzagOrder.size(); } int next() { return zigzagOrder[index++]; }
Follow Up: What if you are given k
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". 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]
.This follow up can be easily solved using deque structure.
vector<int> zigzagOrder; int index; // k vectors struct iteraterStartAndEnd { vector<int>::iterator begin; vector<int>::iterator end; } public zigzagIterator(vector< vector<int> >& nums) { deque<iteraterStartAndEnd> iterators; for(int i = 0; i < nums.size(); ++i) { iteraterStartAndEnd tmp; tmp.begin = nums[i].begin(); tmp.end = nums[i].end(); iterators.push_back(tmp); } while(!iterators.empty()) { auto tmp = iterators.front(); if(tmp.begin != tmp.end()) { zigzagOrder.push_back(*(tmp.begin)); } iterators.pop_front(); tmp.begin++; if(tmp.begin != tmp.end) { iterators.push_back(tmp); } } }
0 0
- LeetCode 281. Zigzag Iterator
- [leetcode] 281. Zigzag Iterator 解题报告
- LeetCode 281. Zigzag Iterator(之字形迭代器)
- [Leetcode] 281. Zigzag Iterator 解题报告
- Leetcode: Zigzag Iterator
- leetcode 281: Zigzag Iterator
- *LeetCode-Zigzag Iterator
- Leetcode Zigzag Iterator
- LeetCode 271. Zigzag Iterator
- LeetCode 题解(272) : Zigzag Iterator
- 281. Zigzag Iterator
- Zigzag Iterator
- Zigzag Iterator
- Zigzag Iterator
- Zigzag Iterator
- [LeetCode281]Zigzag Iterator
- [leetcode281]Zigzag Iterator
- #540 Zigzag Iterator
- Test
- Android获取内存卡MP3信息
- 2014 amazon 在线 面试题目 爬山问题:打印出从A点到B点的距离
- ViewPager+Animation简单示例
- Cookie
- LeetCode 281. Zigzag Iterator
- 有感
- 《数学是什么》书评
- 中文(zh-cn)/英文(en-us)
- Android文件递归遍历
- Android aapt实现资源分区(补充携程aapt源码)
- java中各种数据类型在内存中的存储
- java 字符串编码转换(注意:编码转换不一定是完全可逆的,可能存在数据丢失情况)
- Android BItmap和String互转