成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

leetcode 341 Flatten Nested List Iterator 以及其他Iter

chaosx110 / 1012人閱讀

摘要:返回的是表示是否走到了結(jié)尾。起到的就是緩存作用,因?yàn)檎{(diào)用之后馬上就走到下一個(gè)了。如果調(diào)用,返回用得到和最初的輸入相同的做相同的步驟存入不斷拆開(kāi)得到結(jié)果。思想就是來(lái)自括號(hào),后面也會(huì)跟進(jìn)的專題

Iterator其實(shí)就是一個(gè)單鏈表,無(wú)法回頭看。java里很多數(shù)據(jù)結(jié)構(gòu)都有這個(gè)接口,使用時(shí)需要initalize,得到一個(gè)iterator.
調(diào)用next()返回的是一個(gè)object, 指向的是下一個(gè)未訪問(wèn)過(guò)的部分。
hasnext()返回的是boolean, 表示是否走到了結(jié)尾。

284 Peeking Iterator

class PeekingIterator implements Iterator {
    Iterator iter;
    Integer next = null;    // 起到的就是緩存作用,因?yàn)閚ext()調(diào)用之后馬上就走到下一個(gè)object了。
    
    public PeekingIterator(Iterator iterator) {
        // initialize any member here.
        iter = iterator;
        if(iter.hasNext()){
            next = iter.next();
        }
    }

    // Returns the next element in the iteration without advancing the iterator.
    public Integer peek() {
        return next;
    }

    // hasNext() and next() should behave the same as in the Iterator interface.
    // Override them if needed.
    @Override
    public Integer next() {
        Integer res = next;
        next = iter.hasNext() ? iter.next() : null;
        return res;
    }

    @Override
    public boolean hasNext() {
        return next != null;
    }
}

281 Zigzag Iterator

public class ZigzagIterator {
    Queue list;
    
    public ZigzagIterator(List v1, List v2) {
        list = new LinkedList();
        if(!v1.isEmpty()) list.add(v1.iterator());
        if(!v2.isEmpty()) list.add(v2.iterator());
        // 如果給的是k個(gè)list, List> vs, 只需要把所有v1,v1...vk生成iterator放到q里
        // for(List v: List>) if(!v.isEmpty()) list.add(v.iterator());
    }

    public int next() {
        Iterator iter = list.poll();
        int res = (Integer) iter.next();
        if(iter.hasNext()) list.offer(iter);
        return res;
    }

    public boolean hasNext() {
        return !list.isEmpty();
    }
}

Zigzag Iterator這個(gè)題目和merge k sorted list很像,design twitter用到的就是merge k sorted list的思想加上OOD,會(huì)另寫一篇。

173 BST Iterator

戳這里,BST inorder小專題。
bst iterator

341 Flatten Nested List Iterator

題目的意思定義了一個(gè)特殊的數(shù)據(jù)結(jié)構(gòu),用括號(hào)形成很多層,按從左到右的順序輸出。
括號(hào)是個(gè)強(qiáng)提示,要把括號(hào)里的東西拆開(kāi)還保持原來(lái)的順序,就需要用stack處理。
[1,[4,[6]]] 存到stack里,變成|[4,[6]], [1]|
棧頂調(diào)用isInteger(),返回true, 就要getInteger()輸出。
如果調(diào)用isInteger(),返回false, 用getList()得到和最初的輸入相同的list,做相同的步驟存入stack.
不斷拆開(kāi)NestedInteger, 得到結(jié)果。
這題就是給的API有點(diǎn)多,需要讀懂題意,然后再拆開(kāi)得到結(jié)果。stack思想就是來(lái)自括號(hào),后面也會(huì)跟進(jìn)stack的專題.
/**
 * // This is the interface that allows for creating nested lists.
 * // You should not implement it, or speculate about its implementation
 * public interface NestedInteger {
 *
 *     // @return true if this NestedInteger holds a single integer, rather than a nested list.
 *     public boolean isInteger();
 *
 *     // @return the single integer that this NestedInteger holds, if it holds a single integer
 *     // Return null if this NestedInteger holds a nested list
 *     public Integer getInteger();
 *
 *     // @return the nested list that this NestedInteger holds, if it holds a nested list
 *     // Return null if this NestedInteger holds a single integer
 *     public List getList();
 * }
 */
public class NestedIterator implements Iterator {
    ArrayDeque stk;
    
    public NestedIterator(List nestedList) {
        stk = new ArrayDeque();
        for(int i = nestedList.size()-1; i >= 0; i--){
            stk.addLast(nestedList.get(i));
        }
    }

    @Override
    public Integer next() {
        return stk.pollLast().getInteger();
    }

    @Override
    public boolean hasNext() {
        while(!stk.isEmpty()){
            NestedInteger cur = stk.peekLast();
            if(cur.isInteger()){
                return true;
            }
            List list = stk.pollLast().getList();
            for(int i=list.size()-1; i>=0; i--){
                stk.addLast(list.get(i));
            }
        }
        return false;
    }
}```

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66931.html

相關(guān)文章

  • leetcode341. Flatten Nested List Iterator

    摘要:題目要求假設(shè)有一個(gè)嵌套形式的數(shù)組,要求按照順序遍歷數(shù)組中的元素。思路和代碼首先可以想到通過(guò)深度優(yōu)先遞歸的方式將嵌套形式的數(shù)組展開(kāi)為一個(gè)無(wú)嵌套的列表。 題目要求 Given a nested list of integers, implement an iterator to flatten it. Each element is either an integer, or a lis...

    MartinHan 評(píng)論0 收藏0
  • LeetCode 341. Flatten Nested List Iterator

    摘要:設(shè)計(jì)一個(gè)迭代器,使其能夠遍歷這個(gè)整型列表中的所有整數(shù)。列表中的項(xiàng)或者為一個(gè)整數(shù),或者是另一個(gè)列表。示例輸入輸出解釋通過(guò)重復(fù)調(diào)用直到返回,返回的元素的順序應(yīng)該是。 Description Given a nested list of integers, implement an iterator to flatten it. Each element is either an integ...

    mingzhong 評(píng)論0 收藏0
  • [LintCode/LeetCode] Flatten Nested List Iterator

    摘要:首先,根據(jù)迭代器需要不斷返回下一個(gè)元素,確定用堆棧來(lái)做。堆棧初始化數(shù)據(jù)結(jié)構(gòu),要先從后向前向堆棧壓入中的元素。在調(diào)用之前,先要用判斷下一個(gè)是還是,并進(jìn)行的操作對(duì)要展開(kāi)并順序壓入對(duì)直接返回。 Problem Given a nested list of integers, implement an iterator to flatten it. Each element is either...

    spacewander 評(píng)論0 收藏0
  • Python 迭代器、生成器和列表解析

    摘要:迭代器迭代器在版本中被加入它為類序列對(duì)象提供了一個(gè)類序列的接口。其中方法返回迭代器對(duì)象本身方法返回容器的下一個(gè)元素,在結(jié)尾時(shí)引發(fā)異常。迭代器協(xié)議迭代器協(xié)議即實(shí)現(xiàn)與方法。 迭代器 迭代器在 Python 2.2 版本中被加入, 它為類序列對(duì)象提供了一個(gè)類序列的接口。 Python 的迭代無(wú)縫地支持序列對(duì)象, 而且它還允許迭代非序列類型, 包括用戶定義的對(duì)象。即迭代器可以迭代不是序列但表現(xiàn)...

    dreamGong 評(píng)論0 收藏0
  • [Leetcode] Flatten 2D Vector 整平二維向量

    摘要:另一個(gè)則是的迭代器,它負(fù)責(zé)記錄當(dāng)前到哪一個(gè)的迭代器了。每次時(shí),我們先調(diào)用一下,確保當(dāng)前的迭代器有下一個(gè)值。代碼當(dāng)前列表的迭代器為空,或者當(dāng)前迭代器中沒(méi)有下一個(gè)值時(shí),需要更新為下一個(gè)迭代器 Flatten 2D Vector Implement an iterator to flatten a 2d vector. For example, Given 2d vector = [ ...

    MageekChiu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

chaosx110

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<