我有一个项目,内容如下:
给定一天中时间范围内的一系列股票价格。
找到先买入然后卖出股票所能获得的最大利润。
该函数接收指向数组的指针以及相应的数组大小。
基本上,我必须找到一个最小值,然后找到一个最大值(具有较高的索引),以产生最大的利润。最高-最低
Sample data:
price[0]=100;
price[1]=5;
price[2]=7;
price[3]=34;
price[4]=100;
price[5]=2;
Output Based on Sample Data:
The best possible profit would be if one bought at point 1 and sold at point 4 for 100-5 = 95 a share.
我在想-我有两个小的最小和最大功能。
Min函数找到返回最小值位置索引的最小值。
然后,我们将指针移至min_index +1并将其传递给函数以找到最大值。然后max函数返回max_index;
然后,我们将采用max_index值并减去min_index值。我不知道这是最好的方法,还是好的方法。我也不完全知道用c ++编写代码的最佳方法
谢谢。
最佳答案
// Time zero: Buy and sell at the same time, no profit
int best_buy_index = 0;
int best_sell_index = 0;
int min_index = 0;
int best_profit = 0;
for (int i = 1; i < prices.size(); ++i) {
// Profit we'd get if we had bought at the lowest price yet and sold now.
int profit = (prices[i] - prices[min_index]);
if (profit > best_profit) {
// We found a better solution.
best_buy_index = min_index;
best_sell_index = i;
best_profit = profit;
} else if (prices[i] < prices[min_index]) {
// Potentially better buy time.
min_index = i;
}
}