public int maxProfit(int[] prices) {
int n = prices.length;
int[] rightMax = new int[n]; // 存储每个位置右侧的最大值
rightMax[n-1] = 0; // 初始化最后一个位置的右侧最大值为0
// 计算每个位置右侧的最大值
for (int i = n-2; i >= 0; i--) {
rightMax[i] = Math.max(rightMax[i+1], prices[i+1]);
}
int max = 0; // 存储最大利润
// 遍历每个位置,计算在该位置卖出股票所能获得的利润,并更新最大利润
for (int i = 0; i < n; i++) {
int sub = rightMax[i] - prices[i]; // 计算利润差值
if (sub > max) {
max = sub; // 更新最大利润
}
}
return max;
}