【LeetCode】HOT 100(9)

题单介绍:

精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。

目录

题单介绍:

题目:53. 最大子数组和 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过过过过啦!!!!

题目:55. 跳跃游戏 - 力扣(Leetcode)

题目的接口:

解题思路:

扫描二维码关注公众号,回复: 15347779 查看本文章

代码:

过过过过啦!!!!

写在最后:


题目:53. 最大子数组和 - 力扣(Leetcode)

题目的接口:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {

    }
};

解题思路:

这道题暴力过不了,需要用动态规划或者分治,

但是分治太复杂,动态规划我又不会,

所以我就试了一下贪心,结果贪心也能过,出乎意料,

我还以为贪心过不了,

贪心:

遍历数组,计算区间和sum

如果sum < 0 就重新开始计算

代码如下:

代码:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int ans = INT_MIN;
        int n = nums.size();
        int sum = 0;
        for(int i = 0; i < n; i++) {
            sum += nums[i];
            ans = max(ans, sum);
            if(sum < 0) {
                sum = 0;
            }
        }
        return ans;
    }
};

过过过过啦!!!!

题目:55. 跳跃游戏 - 力扣(Leetcode)

题目的接口:

class Solution {
public:
    bool canJump(vector<int>& nums) {
        
    }
};

解题思路:

这道题的思路很巧妙,

主要思路如下:

遍历数组,记录每个位置能走的最远距离,

如果最远距离 >= 数组最后的下标,就直接返回true,

如果遍历数组的下标 < 我们能走的最远距离,证明我们走不到哪里,就返回false

代码如下:

代码:

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int jump = 0; //记录每个位置最远能走的距离
        for(int i = 0; i < nums.size(); i++) { //遍历整个数组
            if(i > jump) return false; //遍历数组的下标 < 我们能走的最远距离
            if(jump >= nums.size() - 1) return true; //最远距离 >= 数组最后的下标
            jump = max(jump, i + nums[i]); //i + nums[i]是我们这个位置能走的最远距离
        }
        return true;
    }
};

过过过过啦!!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

猜你喜欢

转载自blog.csdn.net/Locky136/article/details/131043059