Lesson 9 question 1 MaxiProfit

源地址

https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_profit/

MaxProfit(最大收益)

一個包含N個元素的數組A, 每個元素表示公司股票的每日價格(美分).

寫一個函數

	class Solution { 
		public int solution(int[] A); 
	}

返回在這段時間內每份額可能獲得的最大收益(美分). 如果不能獲得任何收益,則返回零. 準確的說,函數應返回

	max{0, A[m]−A[k] : 0 ≤ k < m < N }

例如: 指定 N=6,

	A[0] = 23171  
	A[1] = 21011  
	A[2] = 21123
	A[3] = 21366  
	A[4] = 21013  
	A[5] = 21367

函數應返回356: 在股票價格爲210.11美元時買進, 而在213.67.美元時賣出, 則獲得最大收益爲3.56美元. 假設數組A可能包含上百兆字節.
假定:

  • N 是 [0…400,000] 內的 整數;
  • 數組 A 每個元素是取值範圍 [0…200,000] 內的 整數 .

第一步

按照時間順序進行買入和賣出,所以按照時間順序遍歷.

  • 第一天的價格設爲歷史地點
  • 如果比歷史低點高,那麼計算收益,
  • 如果比歷史低點低,那麼當天價格設置爲歷史低點,重新計算收益
    每次只保留最大收益
public int solution(int[] A) {
        int N = A.length;
        if (N == 0) {
            return 0;
        }
        int level = A[0];
        int profit = 0;
        for (int i = 1; i < N; i++) {
            if (A[i] >= level) {
                profit = Math.max(profit, A[i] - level);
            } else {
                level = A[i];
            }
        }
        return profit;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章