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

122. 买卖股票的最佳时机(题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台)

思路:把每次局部递增时的前后元素差值算出来,结果即位这些所有差值的和。

int maxProfit(vector& prices) {
    int result=0;
    int tmp;
    for(int i=0; i0) result+=tmp;
    }
    return result;
}

55. 跳跃游戏(题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台)

思路:用一个变量tmp记录当前位置所能往前进行的最大步数,再根据贪心的思想,每往前移动一步,tmp--,判断tmp和当前下表数组的值nums[i],取max(tmp, nums[i])赋值给tmp,依此遍历到数组末尾,如果tmp始终>=0,说明存在路径可以从数组开始跳到数组结尾。

bool canJump(vector& nums) {
    int tmp=0;
    for(int i=0; i= 0 && nums[i] > tmp) tmp = nums[i];
        tmp--;
    }
    if(tmp >= 0) return true;
    return false;
}

45. 跳跃游戏 II(题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台)

思路:比上题稍难,主要是要从结果往回看,从数组结尾往回遍历,每次取只经过一次跳跃能到达当前数组结尾的最前面的数组下表作为新的结尾,直到当前结尾==0,也就是说遍历到了数组的起点,说明此时从后往前依照每次跳跃最大原则找到了一条从数组起点到数组结尾的路径。

int jump(vector& nums) {
    int size = nums.size();
    if(size==2) return 1;
    int count = 0;
    int lastIndex = size-2;
    int tmpEnd = size;
    while(lastIndex>0){
        for(int i=lastIndex; i>=0; i--){
            if(nums[i]+i+1 >= tmpEnd){
                lastIndex = i;
            }
        }
        count++;
        tmpEnd = lastIndex+1;
    }
    return count;
}

你可能感兴趣的:(算法,leetcode,游戏)