题目:
给你一个股价序列,告诉你每个时间点的股价,问你什么时候买什么时候卖获利最大。时间复杂度越低越好。
int max_difference(const vector<int>& arr) { if (arr.size()>=2) { int MIN=min(arr[0],arr[1]); int MAX_DIFFERENCE=arr[1]-arr[0];//第一个被求出的差值,暂时作为最大的差值 for (vector<int>::size_type i=2;i<arr.size();i++) { if (arr[i]-MIN>MAX_DIFFERENCE) { MAX_DIFFERENCE=arr[i]-MIN; } if (arr[i]<MIN) { MIN=arr[i];//影响新的差值的关键在于已经找到的当前的最小元素是谁,只要将当前值减去这个最小元素就能更新MAX_DIFFERENCE } } return MAX_DIFFERENCE; } else { cout<<"size of arr is too small"; return 0; } } void give_result(int a[],int n) { vector<int> arr(a,a+n); print(arr.begin(),arr.end()); print(max_difference(arr)); } int main( void ) { int a0[]={7,9,10}; give_result(a0,3); int a1[]={10,9,7}; give_result(a1,3); int a[]={3,10,1,9}; give_result(a,4); int a2[]={3,9,2,10,1,8}; give_result(a2,6); return 0; }