Leetcode 3449. Maximize the Minimum Game Score

  • [Leetcode 3449. Maximize the Minimum Game Score](#Leetcode 3449. Maximize the Minimum Game Score)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

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代码实现如下:

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。

相关推荐
Espresso Macchiato9 天前
Leetcode 3530. Maximum Profit from Valid Topological Order in DAG
动态规划·leetcode hard·拓扑序列·leetcode 3530·leetcode双周赛155
Espresso Macchiato1 个月前
Leetcode 3500. Minimum Cost to Divide Array Into Subarrays
leetcode·动态规划·leetcode hard·leetcode 3500·leetcode双周赛153
Espresso Macchiato2 个月前
Leetcode 3490. Count Beautiful Numbers
动态规划·leetcode hard·leetcode 3490·leetcode周赛441·满足条件的自然数
吃瓜市民3 个月前
剑指offer - 面试题11 旋转数组的最小数字
数据结构·c++·算法·二分法
Espresso Macchiato5 个月前
Leetcode 3389. Minimum Operations to Make Character Frequencies Equal
动态规划·leetcode hard·分类讨论·leetcode 3389·leetcode周赛428
源代码•宸5 个月前
Leetcode—367. 有效的完全平方数【简单】
c++·经验分享·算法·leetcode·二分法
Espresso Macchiato5 个月前
Leetcode 3373. Maximize the Number of Target Nodes After Connecting Trees II
动态规划·leetcode hard·leetcode 3373·leetcode周赛426·树的遍历
Espresso Macchiato6 个月前
Leetcode 3352. Count K-Reducible Numbers Less Than N
动态规划·二进制·leetcode hard·leetcode 3352·leetcode周赛423
玉蜉蝣6 个月前
PAT甲级-1048 Find Coins
c++·算法·二分法