日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

(笔试题)风口的猪-中国牛市

發(fā)布時(shí)間:2023/12/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (笔试题)风口的猪-中国牛市 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目:

風(fēng)口之下,豬都能飛。當(dāng)今中國(guó)股市牛市,真可謂“錯(cuò)過(guò)等七年”。 給你一個(gè)回顧歷史的機(jī)會(huì),已知一支股票連續(xù)n天的價(jià)格走勢(shì),以長(zhǎng)度為n的整數(shù)數(shù)組表示,數(shù)組中第i個(gè)元素(prices[i])代表該股票第i天的股價(jià)。 假設(shè)你一開(kāi)始沒(méi)有股票,但有至多兩次買(mǎi)入1股而后賣(mài)出1股的機(jī)會(huì),并且買(mǎi)入前一定要先保證手上沒(méi)有股票。若兩次交易機(jī)會(huì)都放棄,收益為0。 設(shè)計(jì)算法,計(jì)算你能獲得的最大收益。 輸入數(shù)值范圍:2<=n<=100,0<=prices[i]<=100

輸入例子:

3,8,5,1,7,8

輸出例子:

12

思路:

1、動(dòng)態(tài)規(guī)劃

i表示第i天,k表示第k次交易

  • 狀態(tài)轉(zhuǎn)移方程:
    • pmax = max{ f(j,k-1)+prices[i]-prices[j] } (0<=j<i)}
    • f(i,k) = max{ f(i-1,k), pmax}
    • 即f(i,k ) = max{? f(i-1,k) ,? max { f(j,k-1) + prices[i]-prices[j]? |? 0<=j<i } }
  • f(i-1,k)表示第i天不交易
  • max{ f(j,k-1)+prices[i]-prices[j] } (0<=j<i)}表示第i天賣(mài),而這次交易的買(mǎi)應(yīng)該來(lái)自第j天,f(j,k-1) +prices[i] - prices[j] ,0<=j<i ,取最大值。
  • max{ f(j,k-1)+prices[i]-prices[j] } (0<=j<i)},這一步可以通過(guò)單調(diào)隊(duì)列來(lái)優(yōu)化,可以參考一下:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html,簡(jiǎn)單的來(lái)說(shuō),就是將方程中包含j的部分單獨(dú)拿出來(lái)處理,即max(f(j,k-1)-prices[j])

2、前綴、后綴數(shù)組

通過(guò)前綴數(shù)組A來(lái)計(jì)算0次或1次交易的最大收益;

通過(guò)后綴數(shù)組B來(lái)計(jì)算0次或1次交易的最大收益;

通過(guò)遍歷0-n,計(jì)算max(A[i]+B[i])即為最大收益;

代碼:

1、簡(jiǎn)單的動(dòng)態(tài)規(guī)劃

class Solution { public:/*** 計(jì)算你能獲得的最大收益* * @param prices Prices[i]即第i天的股價(jià)* @return 整型*/int kTransaction(vector<int> prices,int k){int n=prices.size();vector<vector<int> > dp(n,vector<int>(k+1,0));int mx;for(int i=1;i<n;i++){for(int t=1;t<=k;t++){mx=dp[i-1][t];for(int j=i-1;j>=0;j--)mx=max(mx,dp[j][t-1]+prices[i]-prices[j]);dp[i][t]=mx;}}return dp[n-1][k];}int calculateMax(vector<int> prices) {return kTransaction(prices,2);} };

2、單調(diào)隊(duì)列優(yōu)化的動(dòng)態(tài)規(guī)劃

class Solution { public:/*** 計(jì)算你能獲得的最大收益* * @param prices Prices[i]即第i天的股價(jià)* @return 整型*/int kTransaction(vector<int> prices,int k){int n=prices.size();vector<vector<int> > dp(n,vector<int>(k+1,0));vector<int> pMax(k+1,0);int mx;for(int i=0;i<=k;i++)pMax[i]=-prices[0];for(int i=1;i<n;i++){pMax[0]=max(pMax[0],dp[i][0]-prices[0]);for(int t=1;t<=k;t++){mx=dp[i-1][t];mx=max(mx,pMax[t-1]+prices[i]);pMax[t-1]=max(pMax[t-1],dp[i][t-1]-prices[i]);dp[i][t]=mx;}}return dp[n-1][k];}int calculateMax(vector<int> prices) {return kTransaction(prices,2);} };

3、前綴后綴數(shù)組

class Solution { public:/*** 計(jì)算你能獲得的最大收益* * @param prices Prices[i]即第i天的股價(jià)* @return 整型*/int calculateMax(vector<int> prices) {int n=prices.size();vector<int> leftMax(n);vector<int> rightMax(n);int lmin=prices[0];leftMax[0]=0;for(int i=0;i<n;i++){lmin=min(lmin,prices[i]);leftMax[i]=max(leftMax[i-1],prices[i]-lmin);}int rmax=prices[n-1];rightMax[n-1]=0;for(int i=n-2;i>=0;i--){rmax=max(rmax,prices[i]);rightMax[i]=max(rightMax[i+1],rmax-prices[i]);}int pmax=0;for(int i=0;i<n;i++)pmax=max(pmax,leftMax[i]+rightMax[i]);return pmax;} }; ?

轉(zhuǎn)載于:https://www.cnblogs.com/AndyJee/p/4478159.html

總結(jié)

以上是生活随笔為你收集整理的(笔试题)风口的猪-中国牛市的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。