Leetcode 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值