股票買賣 II

題目描述

給定一個長度為 N 的數(shù)組,數(shù)組中的第 i 個數(shù)字表示一個給定股票在第 i 天的價格。

設計一個算法來計算你所能獲取的最大利潤。你可以盡可能地完成更多的交易(多次買賣一支股票)。

注意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。

輸入格式
第一行包含整數(shù) N,表示數(shù)組長度。

輸出格式
輸出一個整數(shù),表示最大利潤。

數(shù)據(jù)范圍
1≤N≤105

輸入樣例1

6
7 1 5 3 6 4

輸出樣例1

7

輸入樣例2

5
1 2 3 4 5

輸出樣例2

4

輸入樣例3

5
7 6 4 3 1

輸出樣例3

0

樣例解釋

  1. 樣例1:在第 2 天(股票價格 = 1)的時候買入,在第 3 天(股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5-1 = 4 。隨后,在第 4 天(股票價格 = 3)的時候買入,在第 5 天(股票價格 = 6)的時候賣出, 這筆交易所能獲得利潤 = 6-3 = 3 。共得利潤 4+3 = 7。

  2. 樣例2:在第 1 天(股票價格 = 1)的時候買入,在第 5 天 (股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5-1 = 4 。注意你不能在第 1 天和第 2 天接連購買股票,之后再將它們賣出。因為這樣屬于同時參與了多筆交易,你必須在再次購買前出售掉之前的股票。

  3. 樣例3:在這種情況下, 不進行任何交易, 所以最大利潤為 0。

思路

貪心解法

  1. 因為我們有無限次的交易次數(shù),那么凡是存在data[i] > data[i-1]情形時,我們就可以獲得利潤。
  2. 利潤最大,就是得到所有可能的利潤。

C++ 代碼

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 100010;
int n;
int p[N];

int main()
{
    cin >> n;
    for(int i = 0; i < n; i ++ ) cin >> p[i];
    int res = 0;
    
    for(int i = 0; i < n ; i ++)
    {
        res += max(0 , p[i+1] - p[i]);
    }
    cout << res <<endl;
    return 0;
    
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容