風口之下,豬都能飛。當今中國股市牛市,真可謂“錯過等七年”。 給你一個回顧歷史的機會,已知一支股票連續n天的價格走勢,以長度為n的整數數組表示,


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

輸入例子:
3,8,5,1,7,8

 

輸出例子:
12



法一:分成兩部分分別計算

publicstaticint getmax(int [] prices ,int start ,int end )
{
int max = 0;
int min = prices[start];
for(int i=start+1;i<=end;i++)
{
if (prices[i]-min>max)
max = prices[i]-min;
if (prices[i]<min)
min = prices[i];
}
return max ;
}
/**
     * 計算你能獲得的最大收益
     * 
     * @param prices Prices[i]即第i天的股價
     * @return 整型
     */
    public static int calculateMax(int[] prices)
    {
    int sum = 0;
    
    for(int i=1;i<prices.length;i++)
    {
    int temp = getmax(prices,0,i)+getmax(prices,i,prices.length-1);
    if(temp>sum)
    sum = temp;
    }
    return sum;
    }

法二:利用動態規划,left[i]標識從0-i最大利潤right[i] 從i到end的最大利潤

int calculateMax(vector<int> prices) {
        int n=prices.size();
        if(n<=1)
            return 0;
        vector<int>left(n,0);
        vector<int>right(n,0);
        int min=prices[0];
        for(int i=1;i<n;i++)
        {
            if(min>prices[i])
                min=prices[i];
            left[i]=max(prices[i]-min,left[i-1]);
        }
        int high=prices[n-1];
        for(int i=n-2;i>=0;i--)
        {
            if(high<prices[i])
                high=prices[i];
            right[i]=max(high-prices[i],right[i+1]);
        }
        int result=0;
        for(int i=0;i<n;i++)
        {
            if(right[i]+left[i]>result)
                result=right[i]+left[i];
        }
        return result;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 風口之下,豬都能飛。當今中國股市牛市,真可謂“錯過等七年”。 給你一個回顧歷史的機會,已知一支股票連續n天的價格走勢,以長度為n的整數數組表示,數組中第i個元素(prices[i])代表該股票第i天的股價。 假設你一開始沒有股票,但有至多兩次買入1股而后賣出1股的機會,並且買入前一定要先保證手上沒有股票。若兩次交易機會都放棄,收益為0。 設計算法,計算你能獲得的最大收益。 輸入數值范圍:2<=n< Leetcode練習(Python):數組類:第128題:給定一個未排序的整數數組,找出最長連續序列的長度。 要求算法的時間復雜度為 O(n)。 Leetcode練習(Python):數組類:第121題:給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最多只允許完成一筆交易(即買入和賣出一支股票一次),設計一個算法來計算你所能獲取的最大利潤。 注意:你不能在買入股票前賣出股票。 Leetcode練習(Python):數組類:第122題:給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 設計一個算法來計算你所能獲取的最大利潤。你可以盡可能地完成更多的交易(多次買賣一支股票)。 注意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。 一個正整數表示為n個連續正整數之和(第1屆第2題) Leetcode練習(Python):數組類:第209題:給定一個含有 n 個正整數的數組和一個正整數 s ,找出該數組中滿足其和 ≥ s 的長度最小的連續子數組。如果不存在符合條件的連續子數組,返回 0。 Leetcode練習(Python):數組類:第123題:給定一個數組,它的第 i 個元素是一支給定的股票在第 i 天的價格。 設計一個算法來計算你所能獲取的最大利潤。你最多可以完成 兩筆 交易。 注意: 你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。 中國股市真正的大牛市也許會在2020年 Leetcode練習(Python):數組類:第41題:給你一個未排序的整數數組,請你找出其中沒有出現的最小的正整數。你的算法的時間復雜度應為O(n),並且只能使用常數級別的額外空間。 找出一個整數數組的和最大的連續子數組
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM