贪心算法
买卖股票问题
题目详情
给定一个数组 prices
,其中 prices[i]
表示股票第 i
天的价格。
在每一天,你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
示例1:
输入: prices = [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
示例2:
输入: prices = [1,2,3,4,5]
输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
示例3:
输入: prices = [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
我的代码:
C++
class Solution
{
public:
int maxProfit(vector<int>& prices)
{ int profit=0;
for(int i=1;i<prices.size();++i)
{
int tem=prices[i]-prices[i-1];
if(tem>0)
profit+=tem;
}
return profit;
}
};
Java
class Solution {
public int maxProfit(int[] prices) {
int profit = 0;
for (int i = 1; i < prices.length; ++i){
int temp = prices[i] - prices[i-1]; //计算利益
if (temp > 0){ //赚了就抛,贪!
profit += temp;
}
}
return profit;
}
}
涉及知识点:
- 贪心算法
顾名思义,贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最
后得到的结果是全局最优的。
思路:
把可能跨越多天的买卖都化解成相邻两天的买卖(数学问题),可以自行检验 --> 赚了就抛,贪心!
本道题另一种解法是动态规划,贪心是一种特殊简易解法
不过这种解法不能求出哪两天,只能得出最大利益,所以说也是应付题目之需