• 251. Flatten 2D Vector 平铺二维矩阵


    [抄题]:

    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
  • 相关阅读:
    codeforces 659F F. Polycarp and Hay(并查集+bfs)
    codeforces 659B B. Qualifying Contest(水题+sort)
    codeforces 659E E. New Reform(图论)
    codeforces 659D D. Bicycle Race(水题)
    sql_mode值的含义
    MySQL Query Cache
    Orchestrator安装
    脚本VIP更改为keepalive
    MHA软件下载地址
    MySQL中的事件调度器EVENT
  • 原文地址:https://www.cnblogs.com/immiao0319/p/9452882.html
Copyright © 2020-2023  润新知