文章目录
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
]++;
it
++;
total
--;
return val
;
}
bool hasNext() {
return total
;
}
};
12 ms 8.6 MB
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!