当前位置: 首页 > article >正文

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)-1
        nums = sorted([(x, i) for i, x in enumerate(nums)], key=lambda x: (-x[0], x[1]))
        score = 0
        for x, i in nums:
            if i >= j:
                continue
            score += (j-i) * x
            j = i
            if j == 0:
                break
        return score

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


http://www.kler.cn/a/303116.html

相关文章:

  • C# 委托与匿名方法
  • [CKS] K8S ServiceAccount Set Up
  • Ue5 umg学习(一)
  • 基于promtail+loki+grafana搭建日志系统
  • 重学SpringBoot3-整合 Elasticsearch 8.x (三)使用Repository
  • ssm093基于Java Web的毕业生就业状况管理系统设计与实现+jsp(论文+源码)_kaic
  • 波场TRON领航者孙宇晨:区块链行业的青年先锋与标杆
  • 代理导致的git错误
  • Grafana面板-linux主机详情(使用标签过滤主机监控)
  • 如何使用ssm实现基于VUE3+SSM框架的在线宠物商城+vue
  • 【Java】StringUtils 工具类常用的方法
  • 【JavaSE】--方法的使用
  • 【vuetify】v-select 无法正常显示,踩坑记录!
  • 京东鸿蒙上线前瞻——使用 Taro 打造高性能原生应用
  • .net core 通过Sqlsugar生成实体
  • 安全政策与安全意识(下)
  • 【2024】前端学习笔记3-外部链接-内部链接-锚点链接
  • 鱼类检测-目标检测数据集(包括VOC格式、YOLO格式)
  • mariadb主从配置步骤
  • 苹果CMS影视程序被举报侵权?有效解决方案指南
  • 从 Greenplum 到 Databend,数据仓库的开源新选择
  • 自定义WPF滑块样式-Slider
  • 桥接模式详解和分析JDBC中的应用
  • 微信小程序开发——比较两个数字大小
  • JavaScript知识点2
  • 告别繁琐,IsMyHdOK硬盘测速,即刻享受科技便利