[抄题]:
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()); } }
原文地址:https://www.cnblogs.com/immiao0319/p/9452882.html
时间: 2024-10-07 09:07:45