代码随想录算法训练营day32 || 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

做题时还是要多结合今天的主题,以理解和运用算法为主,形成标准化解决方法。

问题1:122. 买卖股票的最佳时机 II - 力扣(LeetCode)

思路:这个题一开始做的时候复杂化了,在想着用东西记录买卖时的状态点,越想越远。结合题目给出的约束条件后可以发现实际上和之前做过的题类似,计算出相邻两个数之间的差值,然后取最大值即可。

遍历prices数组->从(0,差值)中取出最大值

代码如下:

class Solution {
public:
    int maxProfit(vector& prices) {
        int result=0;
        for(int i=1;i

问题2:55. 跳跃游戏 - 力扣(LeetCode)

思路:从索引为0的地方开始,每次允许最大的跳跃长度是该点的位置加上该点的值,所以该题为一个范围问题,其难点在于每个点可以选择的范围是动态的。

遍历时,当i+nums[i]的值大于数组长度,即可跳跃到最后一点。需要注意i应该不小于能覆盖的范围

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

问题3:45. 跳跃游戏 II - 力扣(LeetCode)

思路:双指针法,代码如下:

class Solution {
public:
    int jump(vector& nums) {
        int result=0;
        int cur=0;
        int next=0;
        if(nums.size()==1) return 0;
        for(int i=0;i

你可能感兴趣的:(游戏)