题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?例如,一只股票在某些时间节点的价格为{9, 11, 8, 5, 7, 12, 16, 14}。如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获最大的利润11。
思路:因为时间顺序的存在,所以我们只要关系最小值及当前值与最小值的差值即可,遍历正如时间顺序一样一直向后推进
public int getMaxDiff(int[] numbers) {
if (numbers == null || numbers.length < 2) return -1;
int minNumber = numbers[0], maxDiff = numbers[1] - numbers[0];
for (int i = 2; i < numbers.length; i++) {
if(minNumber>numbers[i-1]) {
minNumber = numbers[i-1];
}
int diff = numbers[i] -minNumber;
if(diff>maxDiff) {
maxDiff=diff;
}
}
return maxDiff;
}
时间复杂度:O(n)
空间复杂度:O(1)