13.5—动态规划—Best Time to Buy and Sell Sto III

来源:互联网 发布:linux不保存退出 编辑:程序博客网 时间:2024/05/21 12:43
描述
Say you have an array for which the i-th element is the price of a given stock on day i.
Design an algorithm to find the maximum profit. You may complete at most two transactions.
Note: You may not engage in multiple transactions at the same time (ie, you must sell the stock before
you buy again).
#include<iostream>#include<vector>#include<limits>using namespace std;int SellStockIII(int a[], int n){if (a == NULL || n <= 1)return 0;int *left = new int[n];int *right = new int[n];//===int min = a[0];for (int i = 0; i < n; i++){left[i] = 0; right[i] = 0;}for (int i = 1; i < n; i++){if (a[i] < min){min = a[i];left[i] = left[i - 1];}else{if (a[i] - min>left[i - 1])left[i] = a[i] - min;elseleft[i] = left[i - 1];}}//===int max = a[n - 1];for (int i = n - 2; i >= 0; i--){if (a[i]>max){max = a[i];right[i] = right[i + 1];}else{if (max-a[i]>right[i+1])right[i] = max-a[i];elseright[i] = right[i + 1];}}//===int res = INT_MIN;for (int i = 0; i < n; i++)cout << left[i] << " ";cout << endl;for (int i = 0; i < n; i++)cout << right[i] << " ";cout << endl;for (int i = 0; i < n; i++){if (left[i] + right[i]>res)res = left[i] + right[i];}return res;}int main(){const int n = 6;int a[n] = { 1, 4, 2, 3, 8, 5 };int res = SellStockIII(a, n);cout << res << endl;}


阅读全文
0 0