题目描述
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。
我的解法
1. 直接循环
class Solution {
public:
int maxProfit(vector<int>& prices) {
int max_diff = 0;
for(int i=0; i<(int)prices.size(); i++)
{
for(int j=i+1; j<(int)prices.size(); j++)
{
max_diff = max_diff > prices[j]-prices[i] ? max_diff: prices[j]-prices[i];
}
}
return max_diff;
}
};
执行用时 :1328 ms, 在所有 C++ 提交中击败了8.32%的用户
内存消耗 :15.1 MB, 在所有 C++ 提交中击败了5.09%的用户
2. 改进
保存当前最小值 & 最大差值
class Solution {
public:
int maxProfit(vector<int>& prices) {
int len = (int)prices.size();
if(len<=1) return 0;
int max_diff = 0, tmp=0;
int min_value = prices[0];
for(int i=1; i<len; i++)
{
tmp = prices[i] - min_value;
max_diff = max_diff > tmp? max_diff:tmp;
min_value = min_value<prices[i] ? min_value: prices[i];
}
return max_diff;
}
};
执行用时 :8 ms, 在所有 C++ 提交中击败了78.78%的用户
内存消耗 :15.1 MB, 在所有 C++ 提交中击败了5.09%的用户