【Leetcode】59.II.队列的最大值&50.第一个只出现一次的字符

59. II. 队列的最大值

需要实现的不是队列,而是提取队列最大值这个功能。所以直接用queue包来实现queue。用一个队列queue来存放数据(只能先进先出),用双端队列保存最大值。

import queue
class MaxQueue:

    def __init__(self):
        self.deque = queue.deque()
        self.queue = queue.Queue()

    def max_value(self) -> int:
        return self.deque[0] if self.deque else -1


    def push_back(self, value: int) -> None:
        while self.deque and self.deque[-1] < value:
            self.deque.pop()
        self.deque.append(value)
        self.queue.put(value)

    def pop_front(self) -> int:
        if not self.deque:
            return -1
        ans = self.queue.get()
        if ans == self.deque[0]:
            self.deque.popleft()
        return ans
  • queue的get()和put()来从前端弹出和后端加入数据。

  • deque则有pop(), popleft(), append()和appendleft()方法。

  • 复杂度分析

    • 时间复杂度 O ( 1 ) O(1) O(1):三个函数方法的均摊时间复杂度均为 O ( 1 ) O(1) O(1);对push_back方法的弹出比新加入值小的元素,可以理解成一个元素本来应该入队后立即就出队了(O(1)时间)。 但是他们并没有立即出队,把出队的时间花的时间省下来了,然后比它们大的元素来了之后一起出队了。等于把之前省下来的时间全花掉了
    • 空间复杂度 O ( N ) O(N) O(N):当元素个数为 N N N时,最差情况下deque中保存 N N N个元素,使用 O ( N ) O(N) O(N)的额外空间。

50. 第一个只出现一次的字符

哈希表

遍历字符串,用字典来存放字符个数/布尔值表示是否字符多次出现。

遍历字典,寻找字符个数为1的或者布尔值为True的。

class Solution:
    def firstUniqChar(self, s: str) -> str:
        dic = {}
        for char in s:
            dic[char] = not char in dic # 妙啊,如果为False就是字符已经出现过了     
        for k in dic.keys(): # Python3.6之后的字典是有序的
            if dic[k]:
                return k
        
        return " "
  • 复杂度分析
    • 时间复杂度 O ( N ) O(N) O(N) N N N为字符串s长度,需遍历字符串s一轮与dic一轮,dic长度不大于26
    • 空间复杂度 O ( 1 ) O(1) O(1):最多有26个不同字符,哈希表存储需占用 O ( 26 ) = O ( 1 ) O(26)=O(1) O(26)=O(1)的额外空间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值