原题:
Your are given an array of integers prices
, for which the i
-th element is the price of a given stock on day i
; and a non-negative integer fee
representing a transaction fee.
You may complete as many transactions as you like, but you need to pay the transaction fee for each transaction. You may not buy more than 1 share of a stock at a time (ie. you must sell the stock share before you buy again.)
Return the maximum profit you can make.
代码如下:
int maxProfit(int* prices, int pricesSize, int fee) {
int buyPrice=*prices;
int sellPrice=0;
int result=0;
for(int n=1;n<pricesSize;n++)
{
if(prices[n]-buyPrice>fee&&prices[n]>sellPrice)
{
sellPrice=prices[n];
}
if(sellPrice-prices[n]>=fee)
{
result+=sellPrice-buyPrice-fee;
buyPrice=prices[n];
sellPrice=0;
}
if(prices[n]<buyPrice)
buyPrice=prices[n];
//printf("A%d,%d,%d",buyPrice,sellPrice,result);
}
if(sellPrice>0)
result+=sellPrice-buyPrice-fee;
return result;
}
主要还是找到规律,动态规划的规律。
fee是个关键界限。