# Greedy# Array# Simulation

h081 - 1. 程式交易

🔗 前往 ZeroJudge 原題

題目描述

題目描述了程式交易的策略,給定股票歷史價格和一個差價 D,模擬買賣股票以獲取利潤。策略包括在價格達到買入或賣出條件時進行交易,並計算總利潤。

解題思路

這題可以使用貪心策略解決。從第一個股票價格開始買入,然後遍歷後續的價格。如果當前價格大於等於買入價格加 D,則賣出股票並計算利潤。如果當前價格小於等於上次賣出價格減 D,則買入股票。如果最後仍然持有股票,則忽略其成本。

複雜度分析

  • 時間複雜度: O(n)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
int n,D,a[105],ans,v,la;
int main(){
	cin >> n >> D;
	for(int i=0;i<n;++i){
		cin >> a[i];
		if(i==0){
			v=a[i];
		}
		else if(v&&a[i]>=v+D){
			ans+=a[i]-v;
			la=a[i];
			v=0;
		}
		else if(v==0&&a[i]<=la-D){
			v=a[i];
		}
	} 
	cout << ans;
}

Discussion