题目
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。
注意:你不能在买入股票前卖出股票。
暴力求解(用例超时)
直接双重循环,遍历所有结果 取最大
int maxProfit(vector<int>& prices) {
int ans = 0;
for (int i = 0; i < prices.size(); i++) {
for (int j = i+1; j < prices.size(); j++) {
ans = max(ans, prices[j] - prices[i]);
}
}
return ans;
}
复杂度分析
时间复杂度O(n^2)
空间复杂度O(1) 只用了常数个变量
动态规划
我们维护两个变量一个是当前遍历过的最小的入手价格
一个是当前最大的利润
int maxProfit(vector<int>& prices) {
int minprice = 1e9;//最小价格(le9看做无穷大)
int ans = 0;//最大利润
for (int i = 0; i < prices.size(); i++) {
ans = max(ans, prices[i] - minprice);
minprice = min(minprice, prices[i]);
}
return ans;
}
复杂度分析
时间复杂度O(N)
空间复杂度O(1)
希望我所写的对大家有所帮助