leetcode刷题记录1111-1120 python版

前言

继续leetcode刷题生涯
这里记录的都是笔者觉得有点意思的做法
参考了好几位大佬的题解,感谢各位大佬

1111. 有效括号的嵌套深度

class Solution:
    def maxDepthAfterSplit(self, seq: str) -> List[int]:
        n = len(seq)
        res = [0] * n
        for i in range(1, n):
            if seq[i] == seq[i-1]:
                res[i] = 1 - res[i-1]
            else:
                res[i] = res[i-1]
        return res

1114. 按序打印

import threading

class Foo:
    def __init__(self):
        self.l1 = threading.Lock()
        self.l1.acquire()
        self.l2 = threading.Lock()
        self.l2.acquire()

    def first(self, printFirst: 'Callable[[], None]') -> None:
        printFirst()
        self.l1.release()

    def second(self, printSecond: 'Callable[[], None]') -> None:
        self.l1.acquire()
        printSecond()
        self.l2.release()

    def third(self, printThird: 'Callable[[], None]') -> None:
        self.l2.acquire()
        printThird()
       
# event
import threading

class Foo:
    def __init__(self):
        self.e1 = threading.Event()
        self.e2 = threading.Event()

    def first(self, printFirst: 'Callable[[], None]') -> None:
        printFirst()
        self.e1.set()

    def second(self, printSecond: 'Callable[[], None]') -> None:
        self.e1.wait()
        printSecond()
        self.e2.set()

    def third(self, printThird: 'Callable[[], None]') -> None:
        self.e2.wait()
        printThird()

1115. 交替打印FooBar

# 信号量
import threading

class FooBar:
    def __init__(self, n):
        self.n = n
        self.s1 = threading.Semaphore(1)
        self.s2 = threading.Semaphore(0)

    def foo(self, printFoo: 'Callable[[], None]') -> None:
        for i in range(self.n):
            self.s1.acquire()
            printFoo()
            self.s2.release()

    def bar(self, printBar: 'Callable[[], None]') -> None:
        for i in range(self.n):
            self.s2.acquire()
            printBar()
            self.s1.release()
# 字典
class FooBar:
    def __init__(self, n):
        self.n = n
        self.d = {
    
    }

    def foo(self, printFoo: 'Callable[[], None]') -> None:
        self.d['f'] = printFoo
        self.res()

    def bar(self, printBar: 'Callable[[], None]') -> None:
        self.d['b'] = printBar
        self.res()

    def res(self) -> None:
        if len(self.d) == 2:
            for i in range(self.n):
                self.d['f']()
                self.d['b']()

1116. 打印零与奇偶数

import threading
class ZeroEvenOdd:
    def __init__(self, n):
        self.n = n + 1
        self.Zero = threading.Semaphore(1)
        self.Even = threading.Semaphore(0)
        self.Odd = threading.Semaphore(0)

    # printNumber(x) outputs "x", where x is an integer.
    def zero(self, printNumber: 'Callable[[int], None]') -> None:
        for i in range(1, self.n):
            self.Zero.acquire()
            printNumber(0)
            if i % 2 == 1:
                self.Odd.release()
            else:
                self.Even.release()

    def even(self, printNumber: 'Callable[[int], None]') -> None:
        for i in range(1, self.n):
            if i % 2 == 0:
                self.Even.acquire()
                printNumber(i)
                self.Zero.release()

    def odd(self, printNumber: 'Callable[[int], None]') -> None:
        for i in range(1, self.n):
            if i % 2 == 1:
                self.Odd.acquire()
                printNumber(i)
                self.Zero.release()

1117. H2O 生成

from threading import Semaphore
class H2O:
    def __init__(self):
        self.hsem = Semaphore(2)
        self.osem = Semaphore(1)
        self.hydrogenCount = 0

    def hydrogen(self, releaseHydrogen: 'Callable[[], None]') -> None:
        # releaseHydrogen() outputs "H". Do not change or remove this line.
        self.hsem.acquire()
        releaseHydrogen()
        self.hydrogenCount += 1
        if self.hydrogenCount >= 2:
            self.hydrogenCount -= 2
            self.osem.release()

    def oxygen(self, releaseOxygen: 'Callable[[], None]') -> None:
        # releaseOxygen() outputs "O". Do not change or remove this line.
        self.osem.acquire()
        releaseOxygen()
        self.hsem.release()
        self.hsem.release()

猜你喜欢

转载自blog.csdn.net/weixin_44604541/article/details/109046162