欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > Leetcode 3282. Reach End of Array With Max Score

Leetcode 3282. Reach End of Array With Max Score

2025/4/2 15:05:55 来源:https://blog.csdn.net/codename_cys/article/details/142031980  浏览:    关键词:Leetcode 3282. Reach End of Array With Max Score
  • Leetcode 3282. Reach End of Array With Max Score
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3282. Reach End of Array With Max Score

1. 解题思路

这一题有一点脑筋急转弯的意思,核心就是想明白最优路径的构造方法。

显然,如果某一个点上的value比其后任意一个点都大,那么以这个点作为起点到终点所能获得的最大的score必然是从这个点直接跳到终点。

因此,我们将所有的点上的值从大到小进行排列,然后依次取出。

假设对于任意一个点 i i i,我们此时的目标位置为 j j j(初始 j j j即为 n − 1 n-1 n1),则有:

  1. 如果 i > = j i >= j i>=j,说明之前必然有一个更大的点在其左侧,因此我们只要先走到那个点上然后直接从那个点跳到其对应的目标点即可,其获得的score必然大于经过这个点的score。
  2. 如果 i < j i < j i<j,说明从 i i i j j j的这一段当中当前点必然是最大的点,因此我们只要先想办法走到当前点,然后直接跳到目标位置 j j j即可获得最大的score。此时,我们即刻更新新的目标位置为 i i i

由此反复迭代,我们即刻获得最优的路径。

2. 代码实现

给出python代码实现如下:

class Solution:def findMaximumScore(self, nums: List[int]) -> int:j = len(nums)-1nums = sorted([(x, i) for i, x in enumerate(nums)], key=lambda x: (-x[0], x[1]))score = 0for x, i in nums:if i >= j:continuescore += (j-i) * xj = iif j == 0:breakreturn score

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词