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 Macchiato3 天前
Leetcode 3700. Number of ZigZag Arrays II
动态规划·leetcode hard·矩阵乘法·leetcode 3700·leetcode周赛469
Espresso Macchiato4 天前
Leetcode 3695. Maximize Alternating Sum Using Swaps
并查集·leetcode hard·dsu·uf·leetcode 3695·leetcode双周赛166
KarrySmile24 天前
HOT100--Day23--153. 寻找旋转排序数组中的最小值,4. 寻找两个正序数组的中位数,20. 有效的括号
二分查找·数组··hot100·二分法·二分搜索·旋转排序数组
Espresso Macchiato2 个月前
Leetcode 3624. Number of Integers With Popcount-Depth Equal to K II
leetcode hard·segment tree·分段树·leetcode 3624·leetcode周赛459
laufing4 个月前
OD 算法题 B卷【猴子吃桃】
二分法
I AM_SUN4 个月前
153. 寻找旋转排序数组中的最小值
数据结构·c++·算法·leetcode·二分法
Espresso Macchiato4 个月前
Leetcode 3563. Lexicographically Smallest String After Adjacent Removals
动态规划·leetcode hard·leetcode周赛451·leetcode 3563
Espresso Macchiato4 个月前
Leetcode 3562. Maximum Profit from Trading Stocks with Discounts
动态规划·背包问题·leetcode hard·leetcode 3562·leetcode周赛451
Espresso Macchiato5 个月前
Leetcode 3530. Maximum Profit from Valid Topological Order in DAG
动态规划·leetcode hard·拓扑序列·leetcode 3530·leetcode双周赛155
Espresso Macchiato6 个月前
Leetcode 3500. Minimum Cost to Divide Array Into Subarrays
leetcode·动态规划·leetcode hard·leetcode 3500·leetcode双周赛153