Leetcode 3771. Total Score of Dungeon Runs

  • [Leetcode 3771. Total Score of Dungeon Runs](#Leetcode 3771. Total Score of Dungeon Runs)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

1. 解题思路

这一题是Leetcode周赛479的第三题,是一道medium的题目。

这一题的话主要是一些数学分析,我们考察第 i i i个位置一共可以贡献多少score。假设某一个位置 j j j( j ≤ i j \leq i j≤i)开始的score当中位置 i i i贡献了score,那必然有:

r i ≤ h p − ∑ k = j i d k = h p − s i + s j r_i \leq hp - \sum\limits_{k=j}^{i}d_k = hp - s_{i} + s_{j} ri≤hp−k=j∑idk=hp−si+sj

亦即:

r i + s i − h p ≤ s j r_i+s_i-hp \leq s_j ri+si−hp≤sj

其中, s i s_i si表示damage到第 i i i个位置的前序和。

因此,我们只需要计算出第 i i i个位置的 r i + s i − h p r_i+s_i-hp ri+si−hp的值,然后数一下其前序和之中有多少个值大于这个值即为对应位置一共可以获取的score的值。

2. 代码实现

给出python代码实现如下:

python 复制代码
class Solution:
    def totalScore(self, hp: int, damage: List[int], requirement: List[int]) -> int:
        accum_damage = list(accumulate(damage))
        prefix = [0]
        ans = 0
        for accum_dmg, req in zip(accum_damage, requirement):
            s = req + accum_dmg - hp
            idx = bisect.bisect_left(prefix, s)
            ans += len(prefix) - idx
            prefix.append(accum_dmg)
        return ans

提交代码评测得到:耗时251ms,占用内存34.66MB。

相关推荐
Espresso Macchiato3 小时前
Leetcode 3790. Smallest All-Ones Multiple
leetcode medium·leetcode 3790·leetcode周赛482
Espresso Macchiato19 天前
Leetcode 3767. Maximize Points After Choosing K Tasks
leetcode medium·leetcode双周赛171·leetcode 3767
Espresso Macchiato19 天前
Leetcode 3765. Complete Prime Number
leetcode medium·leetcode双周赛171·leetcode 3765
Espresso Macchiato20 天前
Leetcode 3766. Minimum Operations to Make Binary Palindrome
leetcode medium·leetcode 3766·leetcode双周赛171
Espresso Macchiato1 个月前
Leetcode 3741. Minimum Distance Between Three Equal Elements II
滑动窗口·leetcode medium·leetcode 3741·leetcode周赛475
Espresso Macchiato3 个月前
Leetcode 3702. Longest Subsequence With Non-Zero Bitwise XOR
leetcode medium·异或操作·leetcode 3702·leetcode周赛470
Espresso Macchiato3 个月前
Leetcode 3694. Distinct Points Reachable After Substring Removal
滑动窗口·leetcode medium·leetcode双周赛166·leetcode 3694
Espresso Macchiato3 个月前
Leetcode 3698. Split Array With Minimum Difference
leetcode medium·分类讨论·leetcode周赛469·leetcode 3698
Espresso Macchiato4 个月前
Leetcode 3665. Twisted Mirror Path Count
动态规划·leetcode medium·leetcode 3665·leetcode双周赛164