给定一个数组,它的第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;
}
};
给定一个数组,它的第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];
}
};
路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径 至少包含一个 节点,且不一定经过根节点。
路径和是路径中各节点值的总和。
给你一个二叉树的根节点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);
}
};