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。