題目:假設把某股票的價格按照時間先後順序存儲在數組中,請問買賣該股票一次可能獲得的最大利潤是多少?例如,一隻股票在某些時間節點的價格爲{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)