这是数组...int[] array = new int[]{4,-1,-2,3,5,-7,1,0,0,-2,4};我们需要看看我们是否可以从前一天开始购买股票。因此,我们应该以 -1 的价格买入并以 5 的价格卖出。这将带来 6 的利润。 int max = Integer.MIN_VALUE; int maxDiff = Integer.MIN_VALUE; int diff = 0; int bottom = array[0]; for (int i = 1; i < array.length; i++) { diff += array[i] - array[i - 1]; System.out.println(diff); if (diff > maxDiff) { maxDiff = diff; max = array[i]; } if (array[i] < bottom) { bottom = array[i]; diff = 0; } } int maxx = max - maxDiff; System.out.println("Buy at " + maxx + " Sell at " + max);这就是说我应该在 -7 买入并在 4 卖出。这是不正确的。如果我们在 -7 买入,价格将上涨 1,然后保持不变,保持不变,下跌 2,然后上涨 4。这不会为我们赚取最大利润。我究竟做错了什么?
1 回答

胡说叔叔
TA贡献1804条经验 获得超8个赞
由于数组包含价格变动,因此假设起始价格并从中计算最小/最大值
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
int price = 100;
int dayIn = 0;
int dayOut = 0;
for (int i = 0; i < array.length; i++) {
price += array[i];
if (price > max) {
max = price;
dayOut = i;
}
if (price < min) {
min = price;
dayIn = i;
}
}
if (max > min && dayIn < dayOut) {
System.out.printf("Buy for %d at day %d and sell on day %d for %d. Profit: %d\n", min, (dayIn + 1), (dayOut+1), max, max - min);
} else {
System.out.println("No trade opportunity found");
}
添加回答
举报
0/150
提交
取消