文章目录
- 1. 题目
- 2. 解题
1. 题目
给出两个一维的向量,请你实现一个迭代器,交替返回它们中间的元素。
示例:
输入:
v1 = [1,2]
v2 = [3,4,5,6]
输出: [1,3,2,4,5,6]解析: 通过连续调用 next 函数直到 hasNext 函数返回 false,next 函数返回值的次序应依次为: [1,3,2,4,5,6]。拓展:假如给你 k 个一维向量呢?你的代码在这种情况下的扩展性又会如何呢?拓展声明:“锯齿” 顺序对于 k > 2 的情况定义可能会有些歧义。所以,假如你觉得 “锯齿” 这个表述不妥,也可以认为这是一种 “循环”。例如:
输入:
[1,2,3]
[4,5,6,7]
[8,9]
输出: [1,4,8,2,5,9,3,6,7].
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/zigzag-iterator
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
class ZigzagIterator {map<int, vector<int>> m;unordered_map<int,int> idx;int total = 0;map<int, vector<int>>::iterator it;
public:ZigzagIterator(vector<int>& v1, vector<int>& v2) {m[0] = v1;m[1] = v2;it = m.begin();idx[0] = 0;idx[1] = 0;total += v1.size()+v2.size();}int next() {if(!hasNext())return -1;if(it == m.end())it = m.begin();//循环if(idx[it->first] == it->second.size()){ //该数组指针到结尾了m.erase(it++);//删除该数组,移动到下一个数组return next();}int val = it->second[idx[it->first]];//答案值idx[it->first]++;//数组遍历位置+1it++;//去下一个数组total--;//总数-1return val;}bool hasNext() {return total;}
};
12 ms 8.6 MB
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!