題目描述:
假設把某股票的價格按照時間先後順序存儲在數組中,請問買賣 一次 該股票可能獲得的利潤是多少?例如一隻股票在某些時間節點的價格爲[9, 11, 8, 5, 7, 12, 16, 14]。
如果我們能在價格爲5的時候買入並在價格爲16時賣出,則能收穫最大的利潤11。
樣例:
輸入:[9, 11, 8, 5, 7, 12, 16, 14]
輸出:11
分析:
如果把股票的買入價和賣出價視爲一組數對,那麼最大利潤就是數組中所有數對的最大差值,要確保買入在賣出之前。
聲明一個變量min,保存購入的最低價格,當遍歷到第i個數字時,比較nums[i]和min的大小,如果nums[i]<min則令min=nums[i]
然後判斷當前利潤和max的大小如果max<當前利潤則更新max。
public int maxDiff(int[] nums) {
if(nums==null||nums.length==0)
return 0;
int min=nums[0];
int share=0;
for(int i=1;i<nums.length;i++) {
if(nums[i]<min)
min=nums[i];
int cs=nums[i]-min;
if(cs>share)
share=cs;
}
return share;
}