文章目录
121. 买卖股票的最佳时机——允许完成一次交易
题目描述
给定一个数组,它的第 i i i 个元素是一支给定股票第 i i i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。
注意:你不能在买入股票前卖出股票。
题目分析
一次遍历寻找当前遍历过的数据的最小值,如果当前遍历到的数据不是当前遍历过的数据的最小值,那么就计算当前可以获得的最大利润。
code
class Solution {
public:
int maxProfit(vector<int>& prices){
int i,ans=0,minn;
if(prices.empty()) return 0; //力扣的空数组奇葩数据
minn=prices[0]; //初始化
for(i=1;i<prices.size();i++){
//一次遍历
if(prices[i]<minn)//判断当前遍历到的数据是否为当前遍历过的数据的最小值
minn=prices[i];
else//否则计算当前可以获得的最大利润
ans=max(ans,prices[i]-minn);
}
return ans;//输出
}
};
122. 买卖股票的最佳时机 II——允许多次交易
题目描述
给定一个数组,它的第 i i i 个元素是一支给定股票第 i i i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
提示:
1 ≤ p r i c e s . l e n g t h ≤ 3 × 1 0 4 1 \le prices.length \le 3 \times10 ^ 4 1≤prices.length≤3×104
0 ≤ p r i c e s [ i ] ≤ 1 0 4 0 \le prices[i] \le 10 ^ 4 0≤prices[i]≤104
题目分析
因为可以尽可能地完成更多的交易,可以多次买卖一支股票,那么说明可以用贪心。
我们逢低便买入,逢高便卖出。
只要前一天的价格小于后一天的价格便在前一天买入后一天卖出。
code
class Solution {
public:
int maxProfit(vector<int>& prices){
if(prices.size()<=1) return 0;
int i,ans=0;
for(i=1;i<prices.size();i++){
//贪心
ans+=max(prices[i]-prices[i-1],0);
}
return ans;
}
};