LeetCode:55.跳跃游戏——局部最优并非全局最优!

前言:

今天刷到一道题,终于理解了所谓的贪心算法中的"局部最优解并非是全局最优解"。

最近一段时间很是焦虑,原因是自己总想着要最好,要找实习,进大厂,要发论文发最好的。于是就逼着自己把生活中遇到的每一件事都要求做到完美,做到最好。学一个知识点时,沿着深度去学习定义、理论、原理、应用等等。导致学习的速度很慢、广度很小。总是想着把眼前的遇到的问题,做到最优,那么是不是最终的目的也就是最优了呢?答案显然是:错的!

我们学习计算机,都了解过过贪心算法,都知道局部最优解,并非是全局最优解。即,把你的目的终点定在一个地方。你想要达到目的地,并非是每一步都走到最优,才算是达到目的地的最优路径。

举个例子,你想要期末刷绩点到第一,于是你一直想要把自己天天逼在图书馆里,减少玩耍的时间,把每一颗都复试到位,把书上的每个知识点都复习了一遍。结果你发现,你并没有绩点第一。你发现你的效率很低,天天待在图书馆导致你的学习效率低、面面俱到导致你的任务量巨大,而且没有章节的侧重点、你每一个科目都复习,导致你的第一课可能好一点,后面学习疲倦导致其他科目效率低。这便是我们认为的"局部最优解"(把每一科学好、每一章节学好),并非会带来全局最优解(最终GPA最优)。

今天遇到的这道"贪心算法"题------跳跃游戏,恰好印证了这一观点。我们来看一下这道题。

num的元素代表了你可以每次可以走的最大步数。

Num = [2 3 1 1 4]. 你第一步最大可以走2步,如果你在第一步走了最大2步(局部最优),那么你就跳到了 1的位置,你第2步只能走一步。第3步走1步走到4的位置到达终点。共走了3步

然后如果你不追求 局部最优解 !

你在第一步可以最多走2步,但你选择走1步, 于是你第2步可以走3 步,直接跳到终点4的位置。 共走了2步!

上面的感悟说完了,希望大家把眼光放长远,短暂的目光只会封闭我们自我的视野。

好了,

下面开始解题。

解法:

key:不要关注下一步跳1步还是2步,关注当前步能否覆盖的范围。

用一个cover表示最大可以覆盖的范围下标。如果下标等于 了 num.size - 1,那么说明可以覆盖到终点。

循环时候,遍历0- 可以覆盖的范围小标,找下标对应的元素,是否可以更新最大最大覆盖范围。

关键代码如下:

cpp 复制代码
class Solution {
public:
    bool canJump(vector<int>& nums) {
        int cover = 0;
        if(nums.size() == 1)    return true;
        for(int i=0; i<=cover; i++){
            cover = max(i + nums[i], cover);
            if(cover >= nums.size() - 1)   {
                return true;
            } 
        }
        return false;
    }
};

但有了以上还需要修改、补充逻辑,对于案例[2 0],

刚开始cover会更新为2,然后i++为1,继续下一轮for循环,第二轮cover不更新,cover也不等于 num的size而是大于size了,这个时候可以输出了,所以不能是等于,需要更改为>=

相关推荐
谷雨不太卷14 分钟前
AVL树的实现
数据结构·c++·算法
别来无恙1493 小时前
岛屿周长问题的三种解法:直接计数法、数学计算法与深度优先搜索
java·c++·算法·深度优先·dfs
UP_Continue4 小时前
排序--计数排序
数据结构·算法
牵手夏日6 小时前
题目类型——左右逢源
算法
愚润求学7 小时前
【递归、搜索与回溯】FloodFill算法(一)
c++·算法·leetcode
sunny-ll9 小时前
【C++】详解vector二维数组的全部操作(超细图例解析!!!)
c语言·开发语言·c++·算法·面试
嵌入式@秋刀鱼10 小时前
《第四章-筋骨淬炼》 C++修炼生涯笔记(基础篇)数组与函数
开发语言·数据结构·c++·笔记·算法·链表·visual studio code
CloudHu198910 小时前
UE5 免费且好用的插件收集(不定期更新)
游戏·ue5·免费插件
嵌入式@秋刀鱼10 小时前
《第五章-心法进阶》 C++修炼生涯笔记(基础篇)指针与结构体⭐⭐⭐⭐⭐
c语言·开发语言·数据结构·c++·笔记·算法·visual studio code
简简单单做算法10 小时前
基于PSO粒子群优化的VMD-LSTM时间序列预测算法matlab仿真
算法·matlab·lstm·时间序列预测·pso·vmd-lstm·pso-vmd-lstm