Data Stream

http://www.lintcode.com/tag/data-stream/

lt960. First Unique Number in a Stream II

每个操作都是O(1)

public class DataStream {
    class ListNode{
        int value;
        ListNode next;
        ListNode(int value){
            this.value = value;
        }
    }
    Map<Integer, ListNode> map = new HashMap<>();
    Set<Integer> set = new HashSet<>();
    ListNode dummy, tail;
    public DataStream(){
        // do intialization if necessary
        dummy = new ListNode(0);
        tail = dummy;
    }
    /**
     * @param num: next number in stream
     * @return: nothing
     */
    public void add(int num) {
        // write your code here
        if(set.contains(num)){
            if(map.containsKey(num)){
                ListNode pre = map.get(num);
                if(pre.next==tail){
                    tail = pre;
                }else{
                    map.put(pre.next.next.value, pre);
                    pre.next = pre.next.next;
                }
                map.remove(num);
            }
        }else{
            ListNode newNode = new ListNode(num);
            tail.next = newNode;
            map.put(num, tail);
            tail = newNode;
            set.add(num);
        }
    }

    /**
     * @return: the first unique number in stream
     */
    public int firstUnique() {
        // write your code here
        return dummy.next.value;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,434评论 0 10
  • “你很久没有写作了……”不善言辞的林大医生,前天给我发了这样一条微信。很诧异我们平常朋友圈甚少互动,不想却有默默关...
    圆圆的湘气阅读 449评论 1 2
  • 我在这头,看得见你,听见你的声音。 可是任凭我喊哑了嗓子,你却从不回应我。顺其自然的过着,你应有的人生。
    song_ab阅读 241评论 0 1
  • 古有诸子百家,百花齐放 百家争鸣,今有媒体百家, 百花齐放 百家争鸣! 问题是我想探讨 为何百度自媒体取名百家号!...
    战福刚阅读 204评论 0 0
  • 个人素质和态度技术可以学习,素质却难以培养,有些素质是成功的产品经理必不可少的。 对产品的热情有这样一群人,他们对...
    拉文斯基阅读 431评论 0 1