leetcode 1429 python

First Unique Number

You have a queue of integers, you need to retrieve the first unique integer in the queue.

Implement the FirstUnique class:

  • FirstUnique(int[] nums) Initializes the object with the numbers in the queue.
  • int showFirstUnique() returns the value of the first unique integer of the queue, and returns -1 if there is no such integer.
  • void add(int value) insert value to the queue.

Python solution

from collections import Counter, OrderedDict

class FirstUnique:

    def __init__(self, queue: list[int]):
        self.counter = Counter(queue)
        self.ordered_dict = OrderedDict()
        for key in queue:
            if self.counter[key] == 1:
                self.ordered_dict[key] = True

    def add(self, num: int) -> None:
        if num not in self.counter:
            self.ordered_dict[num] = True
        else:
            if num in self.ordered_dict:
                self.ordered_dict.move_to_end(num)
                self.ordered_dict.popitem()

    def showFirstUnique(self) -> int:
        if len(self.ordered_dict) != 0:
            return next(iter(self.ordered_dict.keys()))
        else:
            return -1

以上是我个人提供的算法:

  • 主要是使用orderedDict。使用ordered container这样可以方便的得到第一个元素;使用dict这样一旦有东西被加进来,使得元素不再unique,可以很方便的去除 (直接delete也是可以的)。
  • 由于只有add,没有delete operation,感觉维护一个unique list比较方便而且保证showFirstUnique O(1);如果有delete operation的话,unique有可能会加进来,感觉还不如一开始就维护Ordered list with frequencey (也就是用一个OrderedCounter)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值