zoukankan      html  css  js  c++  java
  • LeetCode 251. Flatten 2D Vector

    原题链接在这里:https://leetcode.com/problems/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].

    Follow up:
    As an added challenge, try to code it using only iterators in C++ or iterators in Java.

    题解:

    用两个index 分别记录list 的 index 和当前 list的element index.

    Time Complexity: Vector2D() O(1). hasNext() O(vec2d.size()). next() O(1). Space: O(1).

    AC Java:

     1 public class Vector2D {
     2     List<List<Integer>> listOfList;
     3     int listIndex;
     4     int elemIndex;
     5     public Vector2D(List<List<Integer>> vec2d) {
     6         listOfList = vec2d;
     7         listIndex = 0;
     8         elemIndex = 0;
     9     }
    10 
    11     public int next() {
    12         return listOfList.get(listIndex).get(elemIndex++);
    13     }
    14 
    15     public boolean hasNext() {
    16         while(listIndex < listOfList.size()){
    17             if(elemIndex < listOfList.get(listIndex).size()){
    18                 return true;
    19             }else{
    20                 listIndex++;
    21                 elemIndex = 0;
    22             }
    23         }
    24         return false;
    25     }
    26 }
    27 
    28 /**
    29  * Your Vector2D object will be instantiated and called as such:
    30  * Vector2D i = new Vector2D(vec2d);
    31  * while (i.hasNext()) v[f()] = i.next();
    32  */

    Follow up 要用Iterator class.

    Time Complexity:  Vector2D() O(1). hasNext() O(vec2d.size()). next() O(1). Space: O(1).

    AC Java:

     1 public class Vector2D implements Iterator<Integer> {
     2     Iterator<List<Integer>> i;
     3     Iterator<Integer> j;
     4     
     5     public Vector2D(List<List<Integer>> vec2d) {
     6         i = vec2d.iterator();        
     7     }
     8 
     9     @Override
    10     public Integer next() {
    11         return j.next();
    12     }
    13 
    14     @Override
    15     public boolean hasNext() {
    16         while((j==null || !j.hasNext()) && i.hasNext()){
    17             j = i.next().iterator();
    18         }
    19         
    20         return j!=null && j.hasNext();
    21     }
    22 }
    23 
    24 /**
    25  * Your Vector2D object will be instantiated and called as such:
    26  * Vector2D i = new Vector2D(vec2d);
    27  * while (i.hasNext()) v[f()] = i.next();
    28  */

    类似Flatten Nested List Iterator.

  • 相关阅读:
    分组与子报表Active Report6 使用(二)
    网站开发人员应该知道的62件事[转]
    如何恢复SVN中已删除文件或文件夹
    java中的List排序[转]
    [原]ActiveReport6 for net使用(一)
    Windows XP 不用输入密码自动登录
    IE不加载ActiveX控件的解决办法
    winRAR 打包小技巧
    iis负载均衡与文件同步[网摘]
    ASP.net的PDF打印(水晶报表)[摘]
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/5216481.html
Copyright © 2011-2022 走看看