Java-买卖股票的最佳时机
假設(shè)你是股王,你會(huì)怎么買(mǎi)賣股票呢(萬(wàn)一呢,hhh)
?既然問(wèn)題來(lái)了,那么直接進(jìn)入正題
給定一個(gè)數(shù)組 prices ,它的第?i 個(gè)元素?prices[i] 表示一支給定股票第 i 天的價(jià)格。
你只能選擇 某一天 買(mǎi)入這只股票,并選擇在 未來(lái)的某一個(gè)不同的日子 賣出該股票。設(shè)計(jì)一個(gè)算法來(lái)計(jì)算你所能獲取的最大利潤(rùn)。
返回你可以從這筆交易中獲取的最大利潤(rùn)。如果你不能獲取任何利潤(rùn),返回 0 。
輸入:[7,1,5,3,6,4]
輸出:5
解釋:在第 2 天(股票價(jià)格 = 1)的時(shí)候買(mǎi)入,在第 5 天(股票價(jià)格 = 6)的時(shí)候賣出,最大利潤(rùn) = 6-1 = 5 。注意利潤(rùn)不能是 7-1 = 6, 因?yàn)橘u出價(jià)格需要大于買(mǎi)入價(jià)格;同時(shí),你不能在買(mǎi)入前賣出股票。
一般能暴力先來(lái)一手暴力解法壓壓驚
public class Solution {public int maxProfit(int[] prices) {int maxprofit = 0;for (int i = 0; i < prices.length - 1; i++) {for (int j = i + 1; j < prices.length; j++) {int profit = prices[j] - prices[i];if (profit > maxprofit) {maxprofit = profit;}}}return maxprofit;} }解法思路:遍歷每個(gè)差值,判斷哪個(gè)差值最大就可以得到最大利潤(rùn)了,只不過(guò)這種方法的時(shí)間復(fù)雜度太高了,很可能時(shí)間超過(guò)限制
那么很容易往貪心那邊想,找到局部最優(yōu)解最后得出結(jié)果
class Solution {public int maxProfit(int[] prices) {int minPrice = Integer.MAX_VALUE;int maxProfit = 0;for(int i = 0 ; i < prices.length ; i++){if(prices[i] < minPrice){minPrice = prices[i];}if(prices[i] - minPrice > maxProfit){maxProfit = prices[i] - minPrice;}}return maxProfit;} }解法思路:當(dāng)然這和動(dòng)態(tài)規(guī)劃其實(shí)差不多,這題來(lái)說(shuō),首先我們肯定是希望找到一個(gè)最小的股票值,作為我們的入股時(shí)間,然后找到這之后的最大價(jià)格出售即可獲得最大值,所以,我們用變量存一個(gè)最小價(jià)格和最大利潤(rùn)。當(dāng)遍歷的元素小于最小價(jià)格時(shí),更新最小價(jià)格,并判斷,當(dāng)前值減去最小價(jià)格是否大于最大利潤(rùn),大于就更新,最后就可以得到結(jié)果
?這里面還有單調(diào)棧,動(dòng)態(tài)規(guī)劃等方法不錯(cuò),可以去看一看:
力扣
總結(jié)
以上是生活随笔為你收集整理的Java-买卖股票的最佳时机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于斐讯K2路由器 j.s9w.cc 劫
- 下一篇: c语言程序设计项目教学教程,C语言程序设