文章目录

  • 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)相关推荐

  1. 杂记1:正向反向迭代器,不同stl容器的lower_bound的使用(set,map,vector,arr,pair),数字转字符串

    感觉自己记性真的不行,很多之前用过,查过的知识点都忘掉了,开个博客记一下吧. 文章目录 迭代器 lower_bound,upper_bound 可以忽略,我暂时没发现用处 这个比较有用:不同容器的lo ...

  2. LeetCode 1311. 获取你好友已观看的视频(BFS+哈希map+vector排序)

    1. 题目 有 n 个人,每个人都有一个 0 到 n-1 的唯一 id . 给你数组 watchedVideos 和 friends ,其中 watchedVideos[i] 和 friends[i] ...

  3. 46 -算法 - Leetcode -169 - 多数元素 - map insert 迭代器

    // map 的用法 m.insert返回值 std::pair<std::vector<int>::iterator, // // bool> res ,插入成功 res.s ...

  4. STL中map/vector的删除元素操作

    在我们使用C++中的STL的时候,可以使用迭代器iterator进行遍历,但是当我们通过iterator对vector和map删除元素的时候,要格外的小心,往往操作不当,导致iterator失效,后果 ...

  5. LeetCode 900. RLE 迭代器(模拟/二分查找)

    文章目录 1. 题目 2. 解题 2.1 直接模拟 2.2 二分查找 1. 题目 编写一个遍历游程编码序列的迭代器. 迭代器由 RLEIterator(int[] A) 初始化,其中 A 是某个序列的 ...

  6. LeetCode 554. 砖墙(map计数)

    1. 题目 你的面前有一堵方形的.由多行砖块组成的砖墙. 这些砖块高度相同但是宽度不同.你现在要画一条自顶向下的.穿过最少砖块的垂线. 砖墙由行的列表表示. 每一行都是一个代表从左至右每块砖的宽度的整 ...

  7. LeetCode 1286. 字母组合迭代器(回溯/位运算)

    文章目录 1. 题目 2. 解题 2.1 回溯 2.2 位运算 1. 题目 请你设计一个迭代器类,包括以下内容: 一个构造函数,输入参数包括:一个 有序且字符唯一 的字符串 characters(该字 ...

  8. LeetCode 284. 顶端迭代器

    1. 题目 给定一个迭代器类的接口,接口包含两个方法: next() 和 hasNext(). 设计并实现一个支持 peek() 操作的顶端迭代器 – 其本质就是把原本应由 next() 方法返回的元 ...

  9. map/vector erase

    问题核心:erase之后迭代器是否失效 vector调用erase之后,该迭代器之后的迭代器都失效: map调用erase之后,其他迭代器并不会失效. 1 vector<int> vecD ...

最新文章

  1. C++中的new和malloc的区别
  2. 人人都有好工作:IT行业求职面试必读
  3. Silverlight 游戏开发小技巧:动感小菜单2
  4. 【2019.7.16 NOIP模拟赛 T1】洗牌(shuffle)(找环)
  5. PHP设计模式之适配器模式
  6. angularJs关于指令的一些冷门属性
  7. PHP笔记-表格及分页功能
  8. react-router中进行路由控制
  9. Myeclipse2017破解:成功解决me Trial expired 0 days ago mgeclipse It's now time to buy the best IDE for yo
  10. 2020Pyton开发者日线上技术峰会主题:爬虫框架的技术实现与模块应用的经验分享
  11. import time python_import time
  12. C# 学习——LINQ 查询
  13. 为什么要隐藏ip地址
  14. Raspberry Pi 4 with Debian GNU/Linux 11 (bullseye)
  15. 互联网突破和 SD-WAN
  16. Datawhale--组队学习第12期--python爬虫基础学习---task0/task1环境配置和网页请求基础
  17. 笔记本未指定打印机服务器,打印机出现在未指定里怎么办?可以这样解决
  18. 【LaTex】利用ins文件和dtx文件生成cls或sty文件,latex宏包的生成与创建方法;配置宏包文件的方法,latex宏包文件放置目录
  19. google中的StopWatch学习
  20. 《改变世界的机器》作者丹尼尔·T·琼斯获 ILSSI 终身成就奖

热门文章

  1. 通过__tablename__ = 'xxx' #定义表名
  2. 关于在用异步消息处理机制使用Message.Obtain()方法(而非New Message)获得一个Message对象的好处
  3. dw1000信标码_DW1000方案工牌型UWB标签,助力10厘米高精度室内定位!
  4. VMware实现Android x86 8.1 从安装到使用
  5. 单耳蓝牙耳机怎么连接_蓝牙耳机怎么挑选?推荐性价比高的蓝牙耳机
  6. php_flag .htaccess,Apache服务器中.htaccess文件的实用配置示例集锦
  7. Linux文件IO(文件的读写)
  8. kali linux 2.0 ssh,Kali 2.0使用SSH进行远程登录(示例代码)
  9. SQL Server Transactional Replication 中的 CommitBatchSize 和 CommitBatchThreshold 属性
  10. iOS开发针对对Masonry下的FPS优化讨论