| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 45. 跳跃游戏 II -> 正文阅读 |
|
[数据结构与算法]45. 跳跃游戏 II |
给你一个非负整数数组?nums ,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 假设你总是可以到达数组的最后一个位置。 我的思路是采用深度遍历,输出所有可能的跳跃方式的步数,取其中最小的那个 代码如下: class?Solution?{ ????int?res?=?Integer.MAX_VALUE; ???? ????public?int?jump(int[]?nums)?{ ????????dfs(nums,?0,?0); ????????return?res; ????} ???? ????public?void?dfs(int[]?nums,int?index,int?times){ ????????if?(index?==?nums.length-1){ ????????????res?=?Math.min(res,?times); ????????????return; ????????} ????????if?(index?>=?nums.length){ ????????????return; ????????} ????????for?(int?i?=?1;?i?<=?nums[index];?i++)?{ ????????????dfs(nums,?index+i,?times+1); ????????} ????} } 问题:超出时间限制 这题是典型的贪心算法 官方给出的思路是: 第一种:如果有多个位置通过跳跃都能够到达最后一个位置,那么我们应该如何进行选择呢?直观上来看,我们可以「贪心」地选择距离最后一个位置最远的那个位置,也就是对应下标最小的那个位置。因此,我们可以从左到右遍历数组,选择第一个满足要求的位置。 第二种:正向搜索每次找到可到达的最远位置,注意这里指的是每次覆盖范围最大,并不是有多远跳多远,而是每次跳的都是将会产生最大覆盖范围的位置. 代码如下: class Solution { |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:19:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |