您的位置:首页 > 其它

[leetcode] 281. Zigzag Iterator 解题报告

2016-03-13 23:12 351 查看
题目链接:https://leetcode.com/problems/zigzag-iterator/

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

思路: 将两个一维数组中的数都先保存起来, 然后设置一个索引位来返回next, 如果已经到了尽头则返回false.

代码如下:

class ZigzagIterator {
public:
ZigzagIterator(vector<int>& v1, vector<int>& v2) {
index = 0;
hash.reserve(v1.size()+v2.size());
int k = 0;
while(k < v1.size() || k < v2.size())
{
if(k < v1.size()) hash.push_back(v1[k]);
if(k < v2.size()) hash.push_back(v2[k]);
k++;
}
}

int next() {
return hash[index++];
}

bool hasNext() {
return index < hash.size();
}
private:
int index;
vector<int> hash;
};

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