Day32——122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II +第二天复习

简介: Day32——122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II +第二天复习

前言


生命能与世俗相契合,才能不朽,生命的整体是象征的,因为他是有意义的.


                                                                                     ——《日瓦戈医生》

一、买卖股票的最佳时机II


力扣

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

返回 你能获得的 最大 利润 。

解题思路:

我一开始是这么想的,我怎么才能让它知道,什么时候该买什么时候该卖呢,我知道全局来算肯定简单,它不知道,我要怎么告诉它,太难了!看答案hhh

but,我们不需要告诉它,我们知道就行,只要我们拆开,把没两天的差值(利润)都算出来,只拿正收入不就行了嘛。因为你在那里同一天卖了在买,到下一天卖,其实就等于是分散的。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int sum=0;
        for(int i=0;i<prices.size()-1;i++)
        {
            if(prices[i+1]-prices[i]>0)        //只要正收入
            {
                sum+=prices[i+1]-prices[i];
            }
        }
        return sum;
    }
};

二、跳跃游戏


力扣

解题思路:

我们用覆盖范围来做,只要覆盖到了终点就行了。

class Solution {
public:
    bool canJump(vector<int>& nums) {
        if(nums.size()==1)
        {
            return true;
        }
        int disance=0;
        for(int i=0;i<=disance;i++)    //重点,我们只在已经覆盖的区域里遍历,因为我们跳不出去
        {
            disance=max(disance,nums[i]+i);    //取最大的
            if(disance>=nums.size()-1)        
            {
                return true;
            }
        }
        return false;
    }
};

三、跳跃游戏||


和上一题非常像,也是用范围覆盖来求,只不过因为要计算步骤,所以复杂一点。

class Solution {
public:
    int jump(vector<int>& nums) {
        if(nums.size()==1)
        {
            return 0;
        }
        int curindance=0;        //上一个距离
        int nextindance=0;        //下一个距离
        int ans=0;            //步数
        for(int i=0;i<nums.size();i++)
        {
            nextindance=max(nextindance,i+nums[i]);        //更新最大覆盖范围
            if(i==curindance)          //如果已经走到尽头了,在覆盖范围内选下一个覆盖范围
            {
                if(curindance!=nums.size()-1)        //还没到终点
                {
                    curindance=nextindance;        //跳一步,扩大范围
                    ans++;
                    if(nextindance>=nums.size()-1)    //找到了
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
        }
        return ans;
    }
};

第二天复习:


1、先排序,两边就是最大的,然后双指针,平方,取最大的,最后再反转

2、滑动窗口,注意双指针移动

3、螺旋数组,感觉难

总结


复习,迷茫了。

相关文章
|
7月前
|
算法
代码随想录Day27 贪心算法02 LeetCode T122 买卖股票的最佳时机II LeetCode T55 跳跃游戏 LeetCode T45 跳跃游戏II
代码随想录Day27 贪心算法02 LeetCode T122 买卖股票的最佳时机II LeetCode T55 跳跃游戏 LeetCode T45 跳跃游戏II
23 0
|
9月前
|
算法 索引
算法训练Day32|● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II
算法训练Day32|● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II
|
6天前
代码随想录Day29 贪心04 LeetCode T860 柠檬水找零 T406 根据身高重建队列 T452 用最少得箭引爆气球
代码随想录Day29 贪心04 LeetCode T860 柠檬水找零 T406 根据身高重建队列 T452 用最少得箭引爆气球
25 0
|
6月前
|
算法
代码随想录算法训练营第三十二天 | LeetCode 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II
代码随想录算法训练营第三十二天 | LeetCode 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II
26 0
|
6月前
|
算法 Java
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
41 0
|
8月前
leetcode 1921. 消灭怪物的最大数量(每日一题)
leetcode 1921. 消灭怪物的最大数量(每日一题)
58 0
|
11月前
【每日一道智力题】之海盗分金币(上)
【每日一道智力题】之海盗分金币(上)
116 0
|
11月前
剑指offer 48. 礼物的最大价值
剑指offer 48. 礼物的最大价值
40 0
|
算法 Java
礼物的最大价值(剑指offer 47)
在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?
|
机器学习/深度学习 存储
LeetCode——1823. 找出游戏的获胜者
LeetCode——1823. 找出游戏的获胜者
106 0
LeetCode——1823. 找出游戏的获胜者