題目描述:
假設把某股票的價格按照時間先後順序存儲在數組中,請問買賣 一次 該股票可能獲得的利潤是多少?
例如一隻股票在某些時間節點的價格爲[9, 11, 8, 5, 7, 12, 16, 14]。
如果我們能在價格爲5的時候買入並在價格爲16時賣出,則能收穫最大的利潤11。
樣例
輸入:[9, 11, 8, 5, 7, 12, 16, 14]
輸出:11
解法:
- 如果數組長度小於等於1,則利潤爲0;
- 先保存當前的最小值,然後從第二個元素開始遍歷,與最小值相比,是否產生更大的利潤,有則更新利潤的最大值,否則,最大利潤保持不變。然後更新當前的最小值,
- 循環遍歷下一個元素。
- 返回最大利潤值。
class Solution {
public:
int maxDiff(vector<int>& nums) {
if(nums.size()<=1)
return 0;
int minval = nums[0];
int value = 0;
for(int i=1; i<nums.size(); i++)
{
value = max(value, nums[i] - minval);
minval = min(minval, nums[i]);
}
return value;
}
};