leetcode腾讯50题-121-122-124

121. 买卖股票的最佳时机

给定一个数组,它的第i个元素是一支给定股票第i天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。

注意:你不能在买入股票前卖出股票。

class Solution {

public:

    int maxProfit(vector<int>& prices) {

        //dp

        int minp=INT_MAX,maxp=INT_MIN;

        for(auto x:prices)

        {

            minp=(x<minp)?x:minp;

            maxp=(x-minp>maxp)?x-minp:maxp;

        }

        return maxp;

    }

};

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

给定一个数组,它的第i个元素是一支给定股票第i天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

class Solution {

public:

    int maxProfit(vector<int>& prices) {

        int n = prices.size();

        vector<int>dp(2);

        dp[0] = 0;

        dp[1] = -prices[0];

        for (int i = 1; i < n; i++) {

            int tmp = dp[0];

            dp[0] = std::max(dp[0], dp[1] + prices[i]); 

            dp[1] = std::max(dp[1], tmp - prices[i]);

        }

        return dp[0];

    }

};

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

路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径 至少包含一个 节点,且不一定经过根节点。

路径和是路径中各节点值的总和。

给你一个二叉树的根节点root,返回其最大路径和

/**

 * Definition for a binary tree node.

 * struct TreeNode {

 *     int val;

 *     TreeNode *left;

 *     TreeNode *right;

 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}

 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}

 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}

 * };

 */

class Solution {

public:

    int maxPathSum(TreeNode* root) {     

        int ms=0;

        maxSum(root,ms);

    }

    int maxSum(TreeNode* root,int&ms,int&cur)

    {

        if(root->left!=nullptr)

        maxSum(root->left);

        int sum=(ms+root->val>=root->val)?ms+root->val:root->val;

        if(root->right!=nullptr)

        maxSum(root->right);

    }

};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容