BM81. 买卖股票的最好时机(二)
描述
示例1
输入:
[8,9,2,5,4,7,1]
输出:
7
说明:
在第1天(股票价格=8)买入,第2天(股票价格=9)卖出,获利9-8=1 在第3天(股票价格=2)买入,第4天(股票价格=5)卖出,获利5-2=3 在第5天(股票价格=4)买入,第6天(股票价格=7)卖出,获利7-4=3 总获利1+3+3=7,返回7示例2
输入:
[5,4,3,2,1]
输出:
0
说明:
由于每天股票都在跌,因此不进行任何交易最优。最大收益为0。示例3
输入:
[1,2,3,4,5]
输出:
4
说明:
第一天买进,最后一天卖出最优。中间的当天买进当天卖出不影响最终结果。最大收益为4。C++ 解法, 执行用时: 13ms, 内存消耗: 3208KB, 提交时间: 2022-06-29
static const auto io_sync_off = []() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算最大收益 * @param prices int整型vector 股票每一天的价格 * @return int整型 */ int maxProfit(vector<int>& prices) { int sumdiff = 0; for(int i=0; i<prices.size()-1; ++i){ int diff = prices[i+1] - prices[i]; if(diff > 0){ sumdiff += diff; } } return sumdiff; } };
C++ 解法, 执行用时: 13ms, 内存消耗: 3212KB, 提交时间: 2022-05-29
static const auto io_sync_off = []() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: int maxProfit(vector<int>& prices) { int n = prices.size(); // dp[i][0]: 表示第i天交易结束后没有股票所获得的最大利润 // dp[i][1]: 表示第i天交易结束后持有股票所获得的最大利润 int dp_i0 = 0, dp_i1 = 0; // base case int tmp_i0 = 0, tmp_i1 = -prices[0]; /* * 状态转移方程: * dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] + prices[i]) * dp[i][1] = max(dp[i - 1][0] - prices[i], dp[i - 1][1]) * */ for (int i = 1; i < n; i++) { dp_i0 = max(tmp_i0, tmp_i1 + prices[i]); dp_i1 = max(tmp_i0 - prices[i], tmp_i1); tmp_i0 = dp_i0; tmp_i1 = dp_i1; } return max(dp_i0, dp_i1); } };
C++ 解法, 执行用时: 13ms, 内存消耗: 3224KB, 提交时间: 2022-06-18
const auto io_sync_off = [] () { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算最大收益 * @param prices int整型vector 股票每一天的价格 * @return int整型 */ int maxProfit(vector<int>& prices) { // write code here int n = prices.size(); int ans = 0; for (int i = 1; i < n; i++) { int a = prices[i] - prices[i - 1]; if (a > 0) { ans += a; } } return ans; } };
C++ 解法, 执行用时: 13ms, 内存消耗: 3240KB, 提交时间: 2021-07-29
const auto io_sync_off=[]() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算最大收益 * @param prices int整型vector 股票每一天的价格 * @return int整型 */ int maxProfit(vector<int>& prices) { // write code here int sum = 0; if(prices.size()<2) { return 0; } int bofeng = 0, bogu = 0; if (prices.at(0) < prices.at(1))//初始为波谷 bogu = prices.at(0); if (prices.at(0) > prices.at(1))//初始为波峰 bofeng = prices.at(0); if (prices.at(0) == prices.at(1)) { bofeng = bogu = prices.at(0); } for (int i = 1; i < prices.size() - 1; i++) { if (prices.at(i) <= prices.at(i + 1) && prices.at(i) <= prices.at(i - 1))//找到波谷 { bogu = prices.at(i); } if (prices.at(i) >= prices.at(i + 1) && prices.at(i) >prices.at(i - 1))//找到波峰 { bofeng = prices.at(i); //if (bofeng != bogu) sum += bofeng - bogu; } } if (prices.at(prices.size() - 1) > prices.at(prices.size() - 2)) { bofeng = prices.at(prices.size() - 1); sum += bofeng - bogu; } return sum; } };
C++ 解法, 执行用时: 13ms, 内存消耗: 3252KB, 提交时间: 2022-06-16
static const auto io_sync_off = []() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算最大收益 * @param prices int整型vector 股票每一天的价格 * @return int整型 */ int maxProfit(vector<int>& prices) { int ans = 0; for (int i = 1; i < prices.size(); i++) { if (prices[i] - prices[i - 1] > 0) ans += prices[i] - prices[i - 1]; } return ans; } };