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 Macchiato2 个月前
Leetcode 3389. Minimum Operations to Make Character Frequencies Equal
动态规划·leetcode hard·分类讨论·leetcode 3389·leetcode周赛428
源代码•宸2 个月前
Leetcode—367. 有效的完全平方数【简单】
c++·经验分享·算法·leetcode·二分法
Espresso Macchiato2 个月前
Leetcode 3373. Maximize the Number of Target Nodes After Connecting Trees II
动态规划·leetcode hard·leetcode 3373·leetcode周赛426·树的遍历
Espresso Macchiato3 个月前
Leetcode 3352. Count K-Reducible Numbers Less Than N
动态规划·二进制·leetcode hard·leetcode 3352·leetcode周赛423
玉蜉蝣3 个月前
PAT甲级-1048 Find Coins
c++·算法·二分法
Espresso Macchiato4 个月前
Leetcode 3321. Find X-Sum of All K-Long Subarrays II
leetcode·滑动窗口·leetcode hard·leetcode 3321·leetcode周赛419
万河归海4285 个月前
C语言——利用二分法求数组中特定元素的索引,并在函数中引入了冒泡排序,可以求无序数组中的特定元素的索引
c语言·数据结构·算法·visualstudio·数组·二分法·冒泡
Espresso Macchiato6 个月前
Leetcode 3261. Count Substrings That Satisfy K-Constraint II
滑动窗口·leetcode hard·leetcode周赛411·leetcode 3261·累积数组
Espresso Macchiato6 个月前
Leetcode 3260. Find the Largest Palindrome Divisible by K
leetcode hard·回文·分类讨论·leetcode 3260·leetcode周赛411