zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【技术评网】说说豆瓣的URL设计
    在这一刻,还是忍不住满眼泪水
    装Sybase,装WAS 6.1的时候报错java.exe损坏的图象
    JasperRepor导出报表通用类
    XSS跨站攻击
    sql 脚本
    解决在无线网络下本机无法连接linux(红帽)虚拟机问题
    pl /sql导入导出表结构,表数据,sql脚本
    asp.net关于WEB端用户重复提交问题。禁用服务器控件按钮问题。
    MQ命令学习总结大全MQ常用命令
  • 原文地址:https://www.cnblogs.com/immiao0319/p/9452882.html
Copyright © 2011-2022 走看看