我有一个项目,内容如下:

给定一天中时间范围内的一系列股票价格。
找到先买入然后卖出股票所能获得的最大利润。
该函数接收指向数组的指针以及相应的数组大小。

基本上,我必须找到一个最小值,然后找到一个最大值(具有较高的索引),以产生最大的利润。最高-最低

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;
  }
}

10-08 09:27