美文网首页
Design 类

Design 类

作者: YOLO哈哈哈 | 来源:发表于2019-02-18 04:02 被阅读0次
    1.Zigzag Iterator(281. leetcode)

    -1.这里会复习到 java 的iterator 概念
    iterator : 每个list 都有一个自己的iterator object

    • iterator method:
      -1. hasNext();
      -2.next(); return <E> 需要cast 到自己想要的type ; 只要遍历过一遍,iterator 就会自动把pointer 移到下一个element , 不需要remove
      3.remove() : remove 最后一个element
    • linkedList method:
      -1. remove(): remove head
      解题思路: 这里会使用 linkedList 数据结构来存储 ,每个list 的iterator object。
      方法一: 使用到 iterator 的解法
    public class ZigzagIterator {
        LinkedList<Iterator> list;
        public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
             list = new LinkedList<>();
             if( ! v1.isEmpty()) list.add( v1.iterator() );
              if( !v2.isEmpty()) list.add( v2.iterator() );
        }
    
        public int next() {
         Iterator poll = list.remove();
         int res = (Integer) poll.next();
         if( poll.hasNext() ) list.add(iterator);
        return res; 
        }
    
        public boolean hasNext() {
            return !list.isEmpty();
        }
    }
    

    方法二: 不使用iterator ,用index 实现 iterator
    **注意点: ** 从构造函数中 传进来的 parameter , 其他function 是不能拿到的, 所以需要在 class 的data 区域 declare 一个指针, 指向这个parameter

    public class ZigzagIterator {
        List<Integer> v1;
        List<Integer> v2;
        int index1;
        int index2;
        public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
            this.v1 = v1;
            this.v2 = v2;
            index1 = 0;
            index2 =0;
        }
        public int next() {
            if( index1 == v1.size() ){
                index2++;
                return v2.get(index2 -1);
            }
          if( index2 == v2.size()) {
              index1 ++;
              return v1.get( index1 -1);
          }
        if( index1 < = index2) {
          index1 ++;
          return v1.get(index1 - 1);
        }else{
          index2++;
          return v2.get( index2 -1 );
        }
      }
    
        public boolean hasNext() {
            return index1 < v1.size() || index2 < v2.size() ; 
        }
       
    }
    
    2.Peeking Iterator(284. leetcode)
    / Java Iterator interface reference:
    // https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
    class PeekingIterator implements Iterator<Integer> {
        
        private Iterator<Integer> iter;
        private boolean curr;
        private int nextInt;
        
        public PeekingIterator(Iterator<Integer> iterator) {
            // initialize any member here.
            iter = iterator;
            curr = false;
        }
    
        // Returns the next element in the iteration without advancing the iterator.
        public Integer peek() {
            if(curr != true){
                nextInt = iter.next();
                curr = true;
            }
            return nextInt;
        }
    
        // hasNext() and next() should behave the same as in the Iterator interface.
        // Override them if needed.
        @Override
        public Integer next() {
            if(curr){
                curr = false;
                return nextInt;
            } 
            else{
                return iter.next();
            }
        }
    
        @Override
        public boolean hasNext() {
            return curr || iter.hasNext();
        }
    }
    

    相关文章

      网友评论

          本文标题:Design 类

          本文链接:https://www.haomeiwen.com/subject/qzdoeqtx.html