[Leetcode/python3] 第202场周赛题解

P1 存在连续三个奇数的数组

class Solution:
    def threeConsecutiveOdds(self, arr: List[int]) -> bool:
        cur = 0
        for x in arr:
            cur = (x & 1) * (cur + (x & 1))
            if cur == 3: 
                return True
        return False

P2 使数组中所有元素相等的最小操作数

class Solution:
    def minOperations(self, n: int) -> int:
        return n**2//4

P3 两球之间的磁力

class Solution:
    def maxDistance(self, A: List[int], m: int) -> int:
        A= sorted(A)
        def check(t):
            c, cnt = A[0], 1 
            for x in A[1:]:
                if x -c >= t:
                    cnt += 1
                    c = x
                if cnt >= m:   
                    return True
            return False    
            
        l, r = 1, A[-1] - A[0]
        while l < r:
            mid = (l + r) >> 1
            if check(mid):
                if check(mid+1):
                    l = mid+1
                else:    
                    return mid
            else:   
                r = mid -1
        return  l

P4 吃掉 N 个橘子的最少天数

from functools import lru_cache
class Solution:
    def minDays(self, n: int) -> int:
        @lru_cache
        def dp(x):
            if x == 0: return 0
            if x == 1: return 1
            return min(dp(x//2) + (x%2) + 1, dp(x//3)+(x%3) + 1)
        return dp(n)

你可能感兴趣的:(python3,leetcode周赛)