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,424評論 0 10
  • “你很久沒有寫作了……”不善言辭的林大醫生,前天給我發了這樣一條微信。很詫異我們平常朋友圈甚少互動,不想卻有默默關...
    圓圓的湘氣閱讀 445評論 1 2
  • 我在這頭,看得見你,聽見你的聲音。 可是任憑我喊啞了嗓子,你卻從不回應我。順其自然的過著,你應有的人生。
    song_ab閱讀 239評論 0 1
  • 古有諸子百家,百花齊放 百家爭鳴,今有媒體百家, 百花齊放 百家爭鳴! 問題是我想探討 為何百度自媒體取名百家號!...
    戰福剛閱讀 203評論 0 0
  • 個人素質和態度技術可以學習,素質卻難以培養,有些素質是成功的產品經理必不可少的。 對產品的熱情有這樣一群人,他們對...
    拉文斯基閱讀 431評論 0 1