代码随想录打卡32天 122. 买卖股票的最佳时机 II 55. 跳跃游戏

122. 买卖股票的最佳时机 II

题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/

算法思路:

贪心的思想。只要去考虑每一天的利润,今天的利润是今天的股票价格-昨天的股票价格,只取正数的利润。

class Solution {

public:

    int maxProfit(vector<int>& prices) {

        int sum = 0;

        for(int i=1;i<prices.size();i++)

        {

            sum += prices[i]-prices[i-1]>0?prices[i]-prices[i-1]:0;

        }

        return sum;

    }

};

55. 跳跃游戏

题目链接:https://leetcode.cn/problems/jump-game/

算法思想:

遍历当前走到的步数能覆盖的范围,然后计算下一个覆盖范围,当覆盖范围能覆盖终点,则可以走到。否则走不到。

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(nums[i] + i, cover); //计算出最大的覆盖范围,然后再去遍历这个覆盖范围

            if(cover>=nums.size()-1)

                return true;

        }

        return false;

    }

};

45. 跳跃游戏 II

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

算法思想:

用for循环模拟走到的地方。

nextdistance记录当前i下一步能走到的最大覆盖范围

curdistance记录当前的最大覆盖范围

如果i走到当前覆盖范围的最远位置却还没到达终点的时候,步数需要+1,然后更新当前覆盖范围为下一步的覆盖范围,重新走。

class Solution {

public:

    int jump(vector<int>& nums) {

        //记录下一步的最远距离下标

        //判断当前的覆盖范围是否已经到达终点了,没有到达就记录步数+1

        //走到下一步时更新当前覆盖范围下标

        int nextdistance = 0;

        int curdistance = 0;

        int ans = 0;

        if(nums.size()==1)

            return 0;

        for(int i=0;i<nums.size();i++)

        {

            nextdistance = max(nums[i]+i, nextdistance);

            if(i == curdistance) //如果已经走到最远的地方了,还是没到终点

            if(i <=nums.size()-1)

            {

                ans++;

                curdistance = nextdistance;

                if(curdistance >=nums.size()-1)

                    break;               

            }

            else

                break;

        }

        return ans;

    }

};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容