281. Zigzag Iterator

LeetCode Link

題目截圖
public class ZigzagIterator {
    private Iterator<Integer> iter1, iter2;
    private Iterator<Integer> iter;
    
    public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
        iter1 = v1.iterator();
        iter2 = v2.iterator();
        
        // pay attention here. list1 could be empty
        iter = iter1.hasNext() ? iter1 : iter2; 
    }

    public int next() {
        int nextInt = iter.next();
        
        if (iter == iter1 && iter2.hasNext()) {
            iter = iter2;
        } else if (iter == iter2 && iter1.hasNext()) {
            iter = iter1;
        }
        
        return nextInt;
    }

    public boolean hasNext() {
        return iter.hasNext();
    }
}

Follow up: Extend to List of List

List of iterators

  1. 如果保持所有的 iterators,那么 next() 和 hasNext() can be up to O(n) runtime, n is the size of list of lists. 因為隨著 next() 的使用,List of iterators 中會有 iter does not have next.
  2. 如果只是保持有 next 的 iterators,那么 next() 和 hasNext() 將都是 O(1) runtime. 需要 LinkedList<Iterator<Integer>> 的首個 iter 即為 nextIterator。
public class ZigzagIterator {
    private LinkedList<Iterator<Integer>> iterators;
    
    public ZigzagIterator(List<List<Integer>> lists) {
        iterators = new LinkedList<>();
        
        for (List<Integer> list: lists) {
            if (list != null && !list.isEmpty()) {
                iterators.add(list.iterator());
            }
        }
    }
    
    public int next() {
        Iterator<Integer> iter = iterators.removeFirst();
        int nextInt = iter.next();
        
        if (iter.hasNext()) {
            iterators.add(iter);
        }
        
        return nextInt;
    }
    
    public boolean hasNext() {
        return !iterators.isEmpty();
    } 
} 
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,863評論 0 10
  • Given two 1d vectors, implement an iterator to return the...
    Jeanz閱讀 338評論 0 0
  • https://leetcode.com/problems/zigzag-iterator/description...
    Super_Alan閱讀 219評論 0 0
  • 會不會有一天,紙幣徹底消失,我們干一天的活,在手機上顯示一組數(shù)字?再或者,一個其貌不揚的人走過,人群中有人驚詫的說...
    如果我真是你大爺閱讀 104評論 0 0
  • 中秋將至回探看, 冒雨駕車碾鄉(xiāng)道。 此景催憶人生路, 多少祖輩奔波老?
    林德木閱讀 394評論 2 6

友情鏈接更多精彩內(nèi)容