Leetcode 3449. Maximize the Minimum Game Score
- Leetcode 3449. Maximize the Minimum Game Score
- 1. 解题思路
- 2. 代码实现
- 题目链接:3449. Maximize the Minimum Game Score
1. 解题思路
这一题思路上就是一个二分法,尝试各个score,看看是否可以满足在给定的m次操作限制下,使得每一个数都不小于给定的score。
然后,我们给出对应的score的下确界即可。
此时,我们需要实现的就是如何判断是否可以在有限的m次操作下将所有的game的score都大于某个给定的值 k k k。
要判断这件事,我们需要注意移动是连续的,因此,某一个位置能到达的次数必然满足:
a
i
−
1
+
a
i
+
1
≥
a
i
a_{i-1} + a_{i+1} \geq a_{i}
ai−1+ai+1≥ai
因此,我们可以通过贪婪算法找出每一个位置要满足至少达到给定分数 k k k的前提下所需要经过的最小的次数。
2. 代码实现
给出python代码实现如下:
class Solution:
def maxScore(self, points: List[int], m: int) -> int:
def is_possible(score):
cnt = 0
debt = 0
for i, p in enumerate(points[:-1]):
need = ceil(score / p)
if debt >= need:
cnt += debt+1
debt = 0
else:
cnt += need
debt = need-debt-1
if cnt > m:
return False
if cnt + debt > m:
return False
allow = debt + (m-cnt-debt+1)//2
return allow * points[-1] >= score
l, r = 0, max(points) * ((m+1) // 2) + 1
while r-l>1:
k = (l+r) // 2
flag = is_possible(k)
if flag:
l = k
else:
r = k
return l
提交代码评测得到:耗时3534ms,占用内存24.1MB。