2018-10-25 First Unique Number In Stream [M]

  1. First Unique Number In Stream

LC:387

Given a continuous stream of numbers, write a function that returns the first unique number whenever terminating number is reached(include terminating number). If there no unique number before terminating number or you can't find this terminating number, return -1.

Example
Given a stream [1, 2, 2, 1, 3, 4, 4, 5, 6] and a number 5
return 3

Given a stream [1, 2, 2, 1, 3, 4, 4, 5, 6] and a number 7
return -1

class LinkedNode:
    def __init__(self, val=None, next=None):
        self.val = val
        self.next = next
        
class Solution:
    def __init__(self,):
        self.hash = {}
        self.head = LinkedNode()
        self.tail = self.head
        
    """
    @param nums: a continuous stream of numbers
    @param number: a number
    @return: returns the first unique number
    """
    def firstUniqueNumber(self, nums, number):
        if not nums:
            return -1
        
        for n in nums:
            if n in self.hash:
                if self.hash[n]:
                    self.remove(self.hash[n])
            else:
                self.push_back(LinkedNode(n))
            if n == number:
                return self.head.next.val
        return -1
    
    def push_back(self, node):
        self.hash[node.val] = self.tail
        self.tail.next = node
        self.tail = node
    
    # different from LRU, need to totally reomove
    # use self.hash[node] to denote that node is deleted
    def remove(self, prev):
        node = prev.next
        prev.next = node.next
        
        if node == self.tail:
            self.tail = prev
        else:
            self.hash[node.next.val] = prev
        
        self.hash[node.val] = None

Note:

  1. Almost the same to 2018-10-23/24 LRU Cache [H]

    1. need LinkedNode()
    2. same push_back()
    3. same __init__(), need hash(value, prev node)
  2. But different in:

    1. remove() instead of move_to_back()
    2. set hash[val] to be None if deleted, because hash still works as "visited"
  3. A really good way of practicing linked list

    1. Learn how to add, remove etc.
    2. Consider edge cases.
      1. tail of linked list inremove()
      2. what if a node is deleted
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • perl: warning: Falling back to a fallback locale ("en_US....
    keaidelele阅读 999评论 0 50
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,452评论 0 10
  • 每天下班经过那个十字路口,总是好多的电动车急急忙忙的穿梭着,不管红绿灯,他都敢过,也不打铃。好几次都差点撞到我。我...
    铁木真真阅读 241评论 0 0
  • 有一种一块大石头终于落地的感觉。 虽然我知道其实我们这边是个小石头。 不过还是好开心啊,可以放松...
    _aqu阅读 341评论 2 0
  • 出了村子,那几个官兵就把我关进了一架马车里。 马车中还有四五个妙龄少女,人人面上都是悲哀绝望的神情,因着不敢惹怒了...
    冷清持阅读 810评论 6 16