Leetcode 3281. Maximize Score of Numbers in Ranges

  • Leetcode 3281. Maximize Score of Numbers in Ranges
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3281. Maximize Score of Numbers in Ranges

1. 解题思路

这一题多少有点惭愧,没有一下子搞定,是看了一下大佬们的思路才恍然大悟的。

这道题核心其实就是个二分法,显然,对于任意的值 k k k,如果其是可能的,那么的必然可以给出一个构造,使得任意两个点之间的距离均不小于 k k k。(注意,这里并不保证score一定可以取到 k k k,只是保证可以存在一个构造,使得其对应的score小于等于 k k k)。

此时,我们即可通过二分法获取 k k k的上界,且这个上界必然是可以取到的。

2. 代码实现

给出python代码实现如下:

class Solution:
    def maxPossibleScore(self, start: List[int], d: int) -> int:
        start = sorted(start)
        n = len(start)
        if n == 2:
            return start[1] - start[0] + d
        
        def is_possible(score):
            left = start[0]
            for x in start[1:]:
                if x + d - left < score:
                    return False
                left = max(x, left+score)
            return True
        
        i, j = 0, start[-1]-start[0]+d
        while j-i > 1:
            m = (i+j) // 2
            if is_possible(m):
                i = m
            else:
                j = m
        return i

提交代码评测得到:耗时2281ms,占用内存31.5MB。

你可能感兴趣的:(leetcode笔记,leetcode,3281,leetcode,medium,leetcode周赛414,leetcode,二分法)