LeetCode 281. 锯齿迭代器(map+vector)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 281. 锯齿迭代器(map+vector)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給出兩個(gè)一維的向量,請(qǐng)你實(shí)現(xiàn)一個(gè)迭代器,交替返回它們中間的元素。
示例: 輸入: v1 = [1,2] v2 = [3,4,5,6] 輸出: [1,3,2,4,5,6]解析: 通過連續(xù)調(diào)用 next 函數(shù)直到 hasNext 函數(shù)返回 false,next 函數(shù)返回值的次序應(yīng)依次為: [1,3,2,4,5,6]。拓展:假如給你 k 個(gè)一維向量呢?你的代碼在這種情況下的擴(kuò)展性又會(huì)如何呢?拓展聲明:“鋸齒” 順序?qū)τ?k > 2 的情況定義可能會(huì)有些歧義。所以,假如你覺得 “鋸齒” 這個(gè)表述不妥,也可以認(rèn)為這是一種 “循環(huán)”。例如: 輸入: [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
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
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();//循環(huán)if(idx[it->first] == it->second.size()){ //該數(shù)組指針到結(jié)尾了m.erase(it++);//刪除該數(shù)組,移動(dòng)到下一個(gè)數(shù)組return next();}int val = it->second[idx[it->first]];//答案值idx[it->first]++;//數(shù)組遍歷位置+1it++;//去下一個(gè)數(shù)組total--;//總數(shù)-1return val;}bool hasNext() {return total;} };12 ms 8.6 MB
長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的LeetCode 281. 锯齿迭代器(map+vector)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奇异值分解(Singular Value
- 下一篇: LeetCode 246. 中心对称数(