腾讯精选50题—Day10题目121,122,124

腾讯精选50题—Day10题目121,122,124

  第十天~

1. 题目121 买卖股票的最佳时机

(1) 题目描述

在这里插入图片描述

(2) 思路

  只一次买进卖出的话,那么只需要遍历一边,记录最低和股票价格并计算最大利润即可。

(3) 题解

class Solution {
    
    
public:
    int maxProfit(vector<int>& prices) {
    
    
    
        int len = prices.size();
        if (len < 2)
            return 0;

        int profix = 0;
        int buy = 0;
        for (int i = 1; i < len; i++)
        {
    
    
            if (prices[buy] > prices[i])
            {
    
    
                buy = i;
                continue;
            }
            else {
    
    
                int temp = prices[i] - prices[buy];
                if (temp > profix)
                {
    
    
                    profix = temp;
                }
            }
            
        }
        return profix;
    }
};

结果:
在这里插入图片描述
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

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

(1) 题目描述

在这里插入图片描述
在这里插入图片描述

(2) 思路

  贪心思想,只要今天比昨天高,那么就卖出。

(3) 题解

class Solution {
    
    
public:
    int maxProfit(vector<int>& prices) {
    
    

        int result = 0;
        for (int i = 1; i < prices.size(); i++)
        {
    
    
            if (prices[i] - prices[i - 1] >= 0)
            {
    
    
                result += prices[i] - prices[i - 1];
            }
        }
        return result;
    }
};

结果:
在这里插入图片描述
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

3. 题目124 二叉树中的最大路径和

(1) 题目描述

在这里插入图片描述
在这里插入图片描述

(2) 思路

  递归。对于一个根节点为A,左子树为B,右子树为C的子树来说,最大路径和一共有三种情况:
  a. A+B+C;
  b. B+A+A的祖先结点;
  c. C+A+A的祖先结点;
  使用全局变量存储最大路径和(初始化为INT_MIN),递归即可。

(3) 题解

class Solution {
    
    
public:
    int maxGain = INT_MIN;

    int maxPathSum(TreeNode* root) {
    
    

        int num = Travel(root);
        return maxGain;
    }
    
    int Travel(TreeNode* root)
    {
    
    
        if (root == NULL)
            return 0;
        int leftGain = max(Travel(root->left), 0);
        int rightGain = max(Travel(root->right), 0);

        int tempGain = leftGain + rightGain + root->val;

        maxGain = max(tempGain, maxGain);
        return root->val + max(leftGain, rightGain);
    }
};

结果:
在这里插入图片描述
时间复杂度: O ( n ) O(n) O(n) n为二叉树的结点数
空间复杂度: O ( h e i g h t ) O(height) O(height) height为二叉树的高度

参考

  1. 二叉树的最大路径和(官方题解)
  2. 二叉树最大路径和
  3. 股票买卖II
  4. 股票买卖II

猜你喜欢

转载自blog.csdn.net/Fox_Alex/article/details/112973919