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

力扣Leetcode:45. 跳跃游戏 II(Python)

题目链接

https://leetcode-cn.com/problems/jump-game-ii/

题目描述

给你一个非负整数数组 nums ,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

假设你总是可以到达数组的最后一个位置。

思路

在前一篇文章中实现了动态规划算法。若数组长度为N,数组元素平均大小为M,则时间复杂度为O(MN)。

下面我们将该算法优化至O(N),即仅遍历一遍。使用贪心思想,在当前位置向后跳时,选择再下一步能够达到最远的(潜力最大的)。即若当前位置为curr,可以选择的下一个位置为i,则选择i+nums[i]最大的位置。可以反证之。这样仅需要遍历一次数组。

代码

class Solution:
    def jump(self, nums) -> int:
        curr, jump_time = 0, 0
        while curr < len(nums)-1:
            # move to the best position
            best_pos, best_val = curr, 0
            for step in range(1, nums[curr]+1):
                # reach the end
                if curr + step >= len(nums)-1:
                    best_pos = curr + step
                    break
                if curr + step + nums[curr + step] > best_val:
                    best_val, best_pos = curr + step + nums[curr + step], curr + step
            curr, jump_time = best_pos, jump_time + 1
        return jump_time


s = Solution()
print(s.jump([2, 3, 1, 1, 4]))
print(s.jump([2, 3, 0, 1, 4]))

相关文章:

  • JMX入门之StandardMBean HelloWord
  • 力扣Leetcode:1. 两数之和(C++、Python、Java)
  • 最长公共子序列
  • 国科大.图像处理.期末复习笔记手稿
  • 喝茶减少电脑对自身的伤害
  • 2020计算机专业保研夏令营面经:南科大计算机
  • 无耻的愤怒
  • 力扣Leetcode:2. 两数相加(C++、Python、Java)
  • 解决jsp程序不直接、代码与UI混杂的痛: JSPWidget
  • Python TypeError: unsupported operand type(s) for /: ‘list‘ and ‘int‘
  • Hello,.NET Compact Framework 2.0(二)
  • 力扣Leetcode:4. 寻找两个正序数组的中位数(Python)
  • Smart Client Case Study Source Code Download from MSDN China
  • 力扣Leetcode:5. 最长回文子串(Python)
  • 古诗词推荐(一):春风十里扬州路,卷上珠帘总不如
  • JS 中的深拷贝与浅拷贝
  • CentOS 7 修改主机名
  • cookie和session
  • EOS是什么
  • JavaWeb(学习笔记二)
  • Linux各目录及每个目录的详细介绍
  • PaddlePaddle-GitHub的正确打开姿势
  • PHP面试之三:MySQL数据库
  • Spark RDD学习: aggregate函数
  • Spring Cloud Feign的两种使用姿势
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 从0实现一个tiny react(三)生命周期
  • 番外篇1:在Windows环境下安装JDK
  • 判断客户端类型,Android,iOS,PC
  • 如何优雅地使用 Sublime Text
  • 协程
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • C# - 为值类型重定义相等性
  • 移动端高清、多屏适配方案
  • #《AI中文版》V3 第 1 章 概述
  • #Z2294. 打印树的直径
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (6)设计一个TimeMap
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (TOJ2804)Even? Odd?
  • (二)JAVA使用POI操作excel
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (四) 虚拟摄像头vivi体验
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)甲方乙方——赵民谈找工作
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .NET DataGridView数据绑定说明
  • .Net IOC框架入门之一 Unity
  • .NET实现之(自动更新)
  • .NET是什么
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [ 转载 ] SharePoint 资料
  • [.net]官方水晶报表的使用以演示下载
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——