414周賽·第二題 - 3281. 範圍內整數的最大得分

WrRan發表於2024-09-09
題目連結 3281. 範圍內整數的最大得分
思路 最大化最小值=>二分法
題解連結 二分答案:最大化最小值(Python/Java/C++/Go)
關鍵點 二分模板:迭代範圍;推薦“開區間”
時間複雜度 \(O(n\log n + n \log \frac{\max(start)+d-\min(start)}{n-1})\)
空間複雜度 \(O(1)\)

程式碼實現:

class Solution:
    def maxPossibleScore(self, start: List[int], d: int) -> int:
        start.sort()

        def check(score):
            x = -inf
            for s in start:
                x = max(x+score, s)
                if x > s+d:
                    return False
            return True
    
        left, right = 0, (start[-1] + d - start[0]) // (len(start)-1) + 1
        while left + 1 < right:
            mid = (left+right) // 2
            if check(mid):
                left = mid
            else:
                right = mid
        return left
Python-標準庫實現
class Solution:
    def maxPossibleScore(self, start: List[int], d: int) -> int:
        start.sort()

        def check(score):
            score += 1
            x = -inf
            for s in start:
                x = max(x+score, s)
                if x > s+d:
                    return False
            return True
    
        right = (start[-1]+d-start[0]) // (len(start)-1)
        return bisect_left(range(right), True, key=check)

相關文章