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

买卖股票的最佳时机II 

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

思路:本题的贪心法在于用不选择亏钱的买卖,某天能赚钱就一定出手,每天都赚钱从而获得总体的最大利益。具体是计算每一天的利润后,如果大于0,就记入总利益。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        vector<int> profit(prices.size()-1);
        for(int i=1;i<prices.size();i++){
            profit[i-1]=prices[i]-prices[i-1];
        }
        int count=0;
        for(int j=0;j<profit.size();j++){
            if(profit[j]>0)count+=profit[j];
        }
        return count;
    }
};

显然这里存在一个更优化的写法

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int profit = 0;
        for (int i = 1; i < prices.size(); i++) {
            int tmp = prices[i] - prices[i - 1];
            if (tmp > 0) profit += tmp;
        }
        return profit;
    }
};

作者:Krahets
链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/solutions/12625/best-time-to-buy-and-sell-stock-ii-zhuan-hua-fa-ji/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

跳跃游戏 

题目链接:55. 跳跃游戏 - 力扣(LeetCode)

思路:k表示可以最远可以到达的距离 ,当遍历到的点已经超出最远能到达的点,说明不能到达终点,如果一直跳到最终点,证明能走通。

 我最开始的想法是每一个只跳一步,遇到0时开始检查前面的点,如果长度能跳过0,则能继续遍历,否则退出遍历返回false,但这个问题在于终点0和中途的0是不同的,中途的0必须跨过去,但是终点的0只需要跳到上面即可,因此不是很好想。

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

作者:Ikaruga
链接:https://leetcode.cn/problems/jump-game/solutions/24322/55-by-ikaruga/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

跳跃游戏II 

题目链接:45. 跳跃游戏 II - 力扣(LeetCode)

思路:首先count记录走的步数,k表示增加一步到达的最远范围,end表示不增加步数的情况下能达到的最大范围。

这里为什么for循环判断条件是nums.size()-1而不是nums.size()呢,原因在于:

况且规定本题的测试用例一定是可以达到终点的。

class Solution {
public:
    int jump(vector<int>& nums) {
        int count=0;
        int k=0;
        int end=0;
        for(int i=0;i<nums.size()-1;i++){
            k=max(k,i+nums[i]);
            if(i==end){
                end=k;
                count+=1;
            }

        }
        return count;
    }
};

 

posted @ 2024-02-29 15:56  SandaiYoung  阅读(10)  评论(0)    收藏  举报