LeetCode 281. 锯齿迭代器(map+vector)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 281. 锯齿迭代器(map+vector)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 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阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 281. 锯齿迭代器(map+vector)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奇异值分解(Singular Value
- 下一篇: LeetCode 246. 中心对称数(