給定一個(gè)數(shù)組?prices
?,它的第?i
?個(gè)元素?prices[i]
?表示一支給定股票第?i
?天的價(jià)格。
你只能選擇?某一天?買入這只股票,并選擇在?未來的某一個(gè)不同的日子?賣出該股票。設(shè)計(jì)一個(gè)算法來計(jì)算你所能獲取的最大利潤(rùn)。
返回你可以從這筆交易中獲取的最大利潤(rùn)。如果你不能獲取任何利潤(rùn),返回?0
?。
示例 1:
輸入:[7,1,5,3,6,4] 輸出:5 解釋:在第 2 天(股票價(jià)格 = 1)的時(shí)候買入,在第 5 天(股票價(jià)格 = 6)的時(shí)候賣出,最大利潤(rùn) = 6-1 = 5 。 注意利潤(rùn)不能是 7-1 = 6, 因?yàn)橘u出價(jià)格需要大于買入價(jià)格;同時(shí),你不能在買入前賣出股票。
示例 2:
輸入:prices = [7,6,4,3,1] 輸出:0 解釋:在這種情況下, 沒有交易完成, 所以最大利潤(rùn)為 0。
提示:
1 <= prices.length <= 105
0 <= prices[i] <= 104
不能用兩個(gè)for()循環(huán)遍歷來解題,因?yàn)楣俜皆诔鲱}是已經(jīng)在測(cè)試用例中限制這超過O(n^2),所以要思考O(n)及以下的方法.
思路:首先不管什么情況,先把簡(jiǎn)單的情況先列舉出來,就像這一題
特殊情況:當(dāng)數(shù)組為空或只有一個(gè)元素時(shí),不用題干中的條件就可以進(jìn)行判斷,所以就先想如何寫這段代碼,首先數(shù)組為空就可以想到
prices == null
只有一個(gè)元素
prices.length < 2||prices.length<=1//這兩種表達(dá)形式都可以
處理完特殊情況后,就可以考慮常規(guī)情況(選擇?某一天?買入這只股票,并選擇在?未來的某一個(gè)不同的日子?賣出該股票),這個(gè)題因?yàn)橐懊娴暮秃竺娴倪M(jìn)行比較就需要進(jìn)行遍歷,一提遍歷就先想到我們最基礎(chǔ)的for循環(huán)遍歷,再把判斷條件寫出來
class Solution {
public int maxProfit(int[] prices) {
if (prices == null || prices.length < 2) {
return 0;
}
for (int i = 1; i < prices.length; i++) {
if (prices[i] < minPrice) {
} else {
}
}
}
}
之后就可以思考之間的轉(zhuǎn)換
這里我想的是先寫個(gè)空變量,再加上首元素(這里思路我覺得是要有些經(jīng)驗(yàn)就很容易想到),在想下
邏輯轉(zhuǎn)換就出來了.
? ? ?假設(shè)prices?=[7,1,5,3,6,4]
-
class Solution { public int maxProfit(int[] prices) { if (prices == null || prices.length < 2) { return 0; } int minPrice = prices[0]; int maxProfit = 0; for (int i = 1; i < prices.length; i++) { if (prices[i] < minPrice) { minPrice = prices[i]; } else { int profit = prices[i] - minPrice; if (profit > maxProfit) { maxProfit = profit; } } } return maxProfit; } }
結(jié)果
文章來源:http://www.zghlxwxcb.cn/news/detail-824957.html
-
總結(jié):這題是屬于簡(jiǎn)單題的那種,做這種的主要是思路的積累.文章來源地址http://www.zghlxwxcb.cn/news/detail-824957.html
到了這里,關(guān)于力扣(Leetcode) 121. 買賣股票的最佳時(shí)機(jī)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!