LeetCode(2023-11-26)


1670. 设计前中后队列

1670. 设计前中后队列

from collections import deque


class FrontMiddleBackQueue:
    def __init__(self):
        self.front_queue = deque()
        self.back_queue = deque()
        self.length = 0

    def adjust(self):
        should_len_front = self.length // 2
        while should_len_front > len(self.front_queue):
            tmp_val = self.back_queue.popleft()
            self.front_queue.append(tmp_val)
        while should_len_front < len(self.front_queue):
            tmp_val = self.front_queue.pop()
            self.back_queue.appendleft(tmp_val)

    def pushFront(self, val: int) -> None:
        self.front_queue.appendleft(val)
        self.length += 1
        self.adjust()

    def pushMiddle(self, val: int) -> None:
        self.adjust()
        if self.length % 2 == 0:
            self.front_queue.append(val)
        else:
            self.back_queue.appendleft(val)
        self.length += 1


    def pushBack(self, val: int) -> None:
        self.back_queue.append(val)
        self.length += 1
        self.adjust()

    def popFront(self) -> int:
        self.adjust()
        if not self.front_queue and not self.back_queue:
            return -1
        if not self.front_queue:
            self.length -= 1
            return self.back_queue.popleft()
        self.length -= 1
        return self.front_queue.popleft()

    def popMiddle(self) -> int:
        self.adjust()
        if self.length % 2 == 0:
            if not self.front_queue:
                return -1
            self.length -= 1
            return self.front_queue.pop()
        else:
            if not self.back_queue:
                return -1
            self.length -= 1
            return self.back_queue.popleft()

    def popBack(self) -> int:
        self.adjust()
        if not self.back_queue:
            return -1
        self.length -= 1
        return self.back_queue.pop()

503. 下一个更大元素 II

503. 下一个更大元素 II

from typing import List


class Solution:
    def nextGreaterElements(self, nums: List[int]) -> List[int]:
        ans = [-1 for i in range(len(nums))]
        stack = []
        for index in range(len(nums) * 2 - 1):
            while stack and nums[index % len(nums)] > nums[stack[-1]]:
                ans[stack[-1]] = nums[index % len(nums)]
                stack.pop()
            stack.append(index % len(nums))
        return ans

2169. 得到 0 的操作数

2169. 得到 0 的操作数

class Solution:
    def countOperations(self, num1: int, num2: int) -> int:
        cnt = 0
        while num2 and num1:
            if num1 >= num2:
                num1 = num1 - num2
            else:
                num2 = num2 - num1
            cnt += 1
        return cnt

2520. 统计能整除数字的位数

2520. 统计能整除数字的位数

from collections import Counter


class Solution:
    def countDigits(self, num: int) -> int:
        c = Counter(str(num))
        ans = 0
        for k, v in c.items():
            if num % int(k) == 0:
                ans += v
        return ans

468. 验证IP地址

468. 验证IP地址

class Solution:
    def validIPAddress(self, queryIP: str) -> str:
        try:
            if '.' in queryIP:
                return self.check_ipv4(queryIP)
            elif ':' in queryIP:
                return self.check_ipv6(queryIP)
        except:
            pass
        return "Neither"

    def check_ipv4(self, ip):
        ip = ip.split('.')
        if len(ip) != 4:
            return "Neither"
        for i in range(len(ip)):
            if int(ip[i]) < 0 or int(ip[i]) > 255:
                return "Neither"
            if len(ip[i]) > 1 and ip[i].startswith('0'):
                return "Neither"
        return "IPv4"

    def check_ipv6(self, ip):
        if set(ip) - set("0123456789ABCDEFabcdef:"):
            return "Neither"
        ip = ip.split(':')
        if len(ip) != 8:
            return "Neither"
        for i in range(len(ip)):
            if len(ip[i]) < 1 or len(ip[i]) > 4:
                return "Neither"
        return "IPv6"

声明:Hello World|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - LeetCode(2023-11-26)


我的朋友,理论是灰色的,而生活之树是常青的!