博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Peeking Iterator
阅读量:7015 次
发布时间:2019-06-28

本文共 3003 字,大约阅读时间需要 10 分钟。

An interesting problem about iterators. shares a very nice solution, which is rewritten below, with minor simplifications.

// Below is the interface for Iterator, which is already defined for you.// **DO NOT** modify the interface for Iterator.class Iterator {    struct Data;    Data* data;public:    Iterator(const vector
& nums); Iterator(const Iterator& iter); virtual ~Iterator(); // Returns the next element in the iteration. int next(); // Returns true if the iteration has more elements. bool hasNext() const;};class PeekingIterator : public Iterator {public: PeekingIterator(const vector
& nums) : Iterator(nums) { // Initialize any member here. // **DO NOT** save a copy of nums and manipulate it directly. // You should only use the Iterator interface methods. peeked = false; } // Returns the next element in the iteration without advancing the iterator. int peek() { if (!peeked) { peeked = true; peekElem = Iterator::next(); } return peekElem; } // hasNext() and next() should behave the same as in the Iterator interface. // Override them if needed. int next() { if(peeked) { peeked = false; return peekElem; } return Iterator::next(); } bool hasNext() const { return peeked || Iterator::hasNext(); }private: bool peeked; int peekElem;};

BTW, it seems that we tend to misspell peek to peak. Well, after learning what peek wants to do, I understood why it uses such a name: peek means to look furtively, which is just like what peek does compared to next :-)

This post shares another super concise solution, just 3 lines of added code in total! And I just know too few about classes in C++ to come up with it...

// Below is the interface for Iterator, which is already defined for you.// **DO NOT** modify the interface for Iterator.class Iterator {    struct Data;    Data* data;public:    Iterator(const vector
& nums); Iterator(const Iterator& iter); virtual ~Iterator(); // Returns the next element in the iteration. int next(); // Returns true if the iteration has more elements. bool hasNext() const;};class PeekingIterator : public Iterator {public: PeekingIterator(const vector
& nums) : Iterator(nums) { // Initialize any member here. // **DO NOT** save a copy of nums and manipulate it directly. // You should only use the Iterator interface methods. } // Returns the next element in the iteration without advancing the iterator. int peek() { return Iterator(*this).next(); } // hasNext() and next() should behave the same as in the Iterator interface. // Override them if needed. int next() { return Iterator::next(); } bool hasNext() const { return Iterator::hasNext(); }};

 

转载于:https://www.cnblogs.com/jcliBlogger/p/4825763.html

你可能感兴趣的文章
nginx 配置域名转发和进行ip限制
查看>>
MongoDB assertion: 18 { code: 18, ok: 0.0, errmsg: "auth fails" }
查看>>
hosts.deny真的可以deny ALL吗?
查看>>
RedHat 7.2 KVM通过V2V迁移VMware的虚拟机
查看>>
Sonar6.0应用之三:集成Eclipse实时代码质量分析(附Eclipse初始化)
查看>>
keepalived实现redis主备切换
查看>>
CentOS 5.5编译升级2.6.35.13内核完整笔记
查看>>
Python网络编程之socket
查看>>
Python实现Linux主机与手机快速分享文件
查看>>
ASA/PIX同一接口中转同区域流量测试(pix8.0)
查看>>
查看linux服务器的品牌和型号
查看>>
高可用结合gfs2,,实现集群文件系统以及集群逻辑卷。
查看>>
LVS/Tun 成功案例
查看>>
第十七章 apache 性能调优
查看>>
linux CentOS x64 里php源码编译出错参见情况及解决办法
查看>>
KindEditor在asp.net mvc4中使用
查看>>
【高级内部资料】.NET数据批量写入性能分析 第二篇
查看>>
MariaDB Window Functions窗口函数分组取TOP N记录
查看>>
Elasticsearch安装配置
查看>>
我父亲的新发明--玉米点播器
查看>>