12.3—贪心法—Best Time to Buy and Sell Sto

来源:互联网 发布:社交网络剧情 编辑:程序博客网 时间:2024/05/21 06:22
描述
Say you have an array for which the i-th element is the price of a given stock on day i.
If you were only permied to complete at most one transaction (ie, buy one and sell one share of the
stock), design an algorithm to find the maximum profit.

#include<iostream>#include<vector>#include<limits>using namespace std;//===int SellStock1(int a[], int n){int max = 0;for (int i = 0; i < n - 1; i++){for (int j = i + 1; j < n; j++){if (a[j] - a[i]>max)max = a[j] - a[i];}}return max;}//===int ThreeNumMax(int a, int b, int c){if (a>=b&&a >= c)return a;if (b >= c&&b >= a)return b;if (c >= a&&c >= b)return c;}int SellStock2(int a[], int begin, int end){if (a == NULL || begin >= end)return 0;int min = INT_MAX;int max = INT_MIN;int minindex = begin;int maxindex = end;for (int i = begin; i <= end; i++){if (a[i]>max){max = a[i]; maxindex = i;}if (a[i] < min){min = a[i]; minindex = i;}}if (maxindex > minindex)return max - min;else{int tmp1 = INT_MAX;int tmp2 = INT_MIN;for (int i = begin; i < maxindex - 1; i++)if (a[i] < tmp1) tmp1 = a[i];for (int i = minindex + 1; i <= end; i++)if (a[i] > tmp2) tmp2 = a[i];return ThreeNumMax(max - tmp1, tmp2 - min, SellStock2(a, maxindex + 1, minindex - 1));}}//===int SellStock3(int a[], int n){int max = INT_MIN;int min_cur = a[0];for (int i = 1; i < n; i++){if (a[i] - min_cur > max)max = a[i] - min_cur;if (a[i] < min_cur)min_cur = a[i];}return max;}int main(){const int n = 6;int a[n] = { 2, 4, 1, 5, 3, 4 };int max1 = SellStock1(a, n);int max2 = SellStock2(a, 0, n - 1);int max3 = SellStock3(a, n);cout << max1 << endl;cout << max2 << endl;cout << max3 << endl;}

阅读全文
0 0