BM80. 买卖股票的最好时机(一)
描述
示例1
输入:
[8,9,2,5,4,7,1]
输出:
5
说明:
在第3天(股票价格 = 2)的时候买入,在第6天(股票价格 = 7)的时候卖出,最大利润 = 7-2 = 5 ,不能选择在第2天买入,第3天卖出,这样就亏损7了;同时,你也不能在买入前卖出股票。示例2
输入:
[2,4,1]
输出:
2
示例3
输入:
[3,2,1]
输出:
0
C++ 解法, 执行用时: 3ms, 内存消耗: 392KB, 提交时间: 2022-07-26
class Solution { public: /** * * @param prices int整型vector * @return int整型 */ int maxProfit(vector<int>& prices) { // write code here int profit = 0; int minPrice = INT_MAX; for (auto it = prices.begin(); it != prices.end(); it++){ profit = max(*it - minPrice, profit); minPrice = min(minPrice, *it); } return profit; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 392KB, 提交时间: 2022-07-18
class Solution { public: /** * * @param prices int整型vector * @return int整型 */ int maxProfit(vector<int>& prices) { // write code here int n = prices.size(); if(n == 0) return 0; vector<vector<int>> dp(n, vector<int>(2)); dp[0][0] = 0; dp[0][1] = -prices[0]; for(int i=1; i<n; i++) { dp[i][0] = max(dp[i-1][0], dp[i-1][1]+prices[i]); dp[i][1] = max(dp[i-1][1], -prices[i]); } return dp[n-1][0]; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-07-29
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param prices int整型vector * @return int整型 */ int maxProfit(vector<int>& prices) { int ans = 0; int preMin = prices[0]; int profit = 0; for(int i = 1; i < prices.size(); ++i) { ans = max(ans, prices[i]-preMin); preMin = min(preMin, prices[i]); } return ans; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-07-24
class Solution { public: int maxProfit(vector<int>& prices) { int n= prices.size(); vector<vector<int>> dp(n, vector<int>(2, 0)); // dp[i][0] 表示没有股票的最大收益 // dp[i][1] 表示有股票的最大收益 dp[0][0] = 0; dp[0][1] = -prices[0]; for(int i=1; i<n; ++i){ dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i]); dp[i][1] = max(dp[i-1][1], -prices[i]); } return dp[n-1][0]; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-07-21
class Solution { public: /** * * @param prices int整型vector * @return int整型 */ int maxProfit(vector<int>& prices) { // write code here int len=prices.size(); vector<vector<int>> dp(len,vector<int>(2,0)); dp[0][0]=-prices[0]; dp[0][1]=0; for(int i=1;i<len;i++){ dp[i][0]=max(dp[i-1][0],-prices[i]); dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i]); } return dp[len-1][1]; } };