251. Flatten 2D Vector 平鋪二維矩陣
阿新 • • 發佈:2018-08-10
pre pub order lse bool array 條件 space closed
[抄題]:
Implement an iterator to flatten a 2d vector.
Example:
Input: 2d vector =
[
[1,2],
[3],
[4,5,6]
]
Output: [1,2,3,4,5,6]
Explanation: By calling next repeatedly until hasNext returns false,
the order of elements returned by next should be: [1,2,3,4,5,6]
.
[暴力解法]:
時間分析:
空間分析:
[優化後]:
時間分析:
空間分析:
[奇葩輸出條件]:
[奇葩corner case]:
j必須非空且有下才行j != null && j.hasNext();,空而有下不行。
[思維問題]:
[英文數據結構或算法,為什麽不用別的數據結構或算法]:
Iterator<List<Integer>>是已有的api,可以直接拿來用。包括了next hasnext remove方法。
i = j.next().iterator();對雙重數組調用.iterator()可以產生一種遍歷的數據結構。
[一句話思路]:
[輸入量]:空: 正常情況:特大:特小:程序裏處理到的特殊情況:異常情況(不合法不合理的輸入):
[畫圖]:
[一刷]:
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分鐘肉眼debug的結果]:
[總結]:
i = j.next().iterator();對雙重數組調用.iterator()可以產生一種遍歷的數據結構。
[復雜度]:Time complexity: O(n) Space complexity: O(n)
[算法思想:叠代/遞歸/分治/貪心]:
[關鍵模板化代碼]:
雙重list的寫法:
List<List<Integer>> vec2d = new ArrayList<>(); vec2d.add(Arrays.asList(1, 2)); vec2d.add(Arrays.asList(3)); vec2d.add(Arrays.asList(4, 5, 6)); Vector2D rst = new Vector2D(vec2d);
[其他解法]:
[Follow Up]:
[LC給出的題目變變變]:
[代碼風格] :
[是否頭一次寫此類driver funcion的代碼] :
[潛臺詞] :
// package whatever; // don‘t place package name! import java.util.*; import java.lang.*; class Vector2D { private Iterator<List<Integer>> i; private Iterator<Integer> j; public Vector2D(List<List<Integer>> vec2d) { i = vec2d.iterator(); } public int next() { hasNext(); return j.next(); } public boolean hasNext() { while ((j == null || !j.hasNext()) && i.hasNext()) j = i.next().iterator(); return j != null && j.hasNext(); } } class MyCode { public static void main (String[] args) { List<List<Integer>> vec2d = new ArrayList<>(); vec2d.add(Arrays.asList(1, 2)); vec2d.add(Arrays.asList(3)); vec2d.add(Arrays.asList(4, 5, 6)); Vector2D rst = new Vector2D(vec2d); System.out.println(rst.next()); System.out.println(rst.next()); System.out.println(rst.next()); System.out.println(rst.next()); System.out.println(rst.next()); } }View Code
251. Flatten 2D Vector 平鋪二維矩陣