小米编程真题:风口的猪-中国牛市
生活随笔
收集整理的這篇文章主要介紹了
小米编程真题:风口的猪-中国牛市
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目描述
風(fēng)口之下,豬都能飛。當(dāng)今中國股市牛市,真可謂“錯過等七年”。 給你一個回顧歷史的機會,已知一支股票連續(xù)n天的價格走勢,以長度為n的整數(shù)數(shù)組表示,數(shù)組中第i個元素(prices[i])代表該股票第i天的股價。 假設(shè)你一開始沒有股票,但有至多兩次買入1股而后賣出1股的機會,并且買入前一定要先保證手上沒有股票。若兩次交易機會都放棄,收益為0。 設(shè)計算法,計算你能獲得的最大收益。 輸入數(shù)值范圍:2<=n<=100,0<=prices[i]<=100。
示例1
輸入:3,8,5,1,7,8
輸出:12
方法一
遍歷:由于至多兩次買入1股而后賣出1股的機會,并且買入前一定要先保證手上沒有股票。所以我們可以將prices[]分為兩份0-i,i-prices.length,分別計算兩部分的最大值,然后遍歷i,求出和的最大值
步驟:1、創(chuàng)建求最大值的方法,輸入prices[]、start、end,輸出開始結(jié)束區(qū)間內(nèi)差的最大值max
2、將數(shù)組分為兩部分,進行遍歷。
代碼如下
public class Solution {/*** 計算你能獲得的最大收益* * @param prices Prices[i]即第i天的股價* @return 整型*/public int calculateMax(int[] prices) {int sum=0;//儲存兩次最大收益和for(int i=1;i<prices.length;i++){int index=getMaxDifference(prices,0,i)+getMaxDifference(prices,i,prices.length-1);if(sum<index){sum=index;}}return sum;}public static int getMaxDifference(int [] prices,int start,int end){int min=prices[start];int max=0;for(int i =start+1;i<=end;i++){if(max<prices[i]-min){max=prices[i]-min;}if (min>prices[i]){min=prices[i];}}return max;} }方法二
public class Solution {/*** 計算你能獲得的最大收益* * @param prices Prices[i]即第i天的股價* @return 整型*/public int calculateMax(int[] prices) {int firstBuy = Integer.MAX_VALUE;//第一次買入的價格// 接下來都是買入賣出之后的收益int afterFirstSell = 0;int afterSecondBuy = Integer.MIN_VALUE;int afterSecondSell = 0;for (int curPrice: prices){//第一次買入的價格應(yīng)該是越小越好,最好是負(fù)數(shù),倒貼錢firstBuy = Math.min(firstBuy, curPrice);//第一次賣出后的收益,等于當(dāng)前價格減去第一次買入價格,越高越好afterFirstSell = Math.max(afterFirstSell, curPrice - firstBuy);//第二次買入后的收益,等于第一次賣出后的收益減去當(dāng)前價格,越高越好afterSecondBuy = Math.max(afterSecondBuy, afterFirstSell - curPrice);//第二次賣出后的收益,等于第二次買入后的收益加上當(dāng)前價格,越高越好afterSecondSell = Math.max(afterSecondSell, afterSecondBuy + curPrice);}return afterSecondSell;} }總結(jié)
以上是生活随笔為你收集整理的小米编程真题:风口的猪-中国牛市的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特殊符号大全,方便大家输入特殊字符用
- 下一篇: PCB生成BOM表、网络表添加logo并