📅  最后修改于: 2023-12-03 15:11:46.450000             🧑  作者: Mango
本程序用于计算给定数组中股票的最大利润。其核心算法基于贪心思想,时间复杂度为O(n)。
首先,定义一个函数 maxProfit
,该函数接受一个整数数组 prices
,表示股票在不同日期的价格。函数返回值为整数,表示股票所能获取的最大利润。
其实现如下:
int maxProfit(vector<int>& prices) {
if (prices.size() < 2) { // 如果数组元素数量小于2,不可能发生交易,直接返回0
return 0;
}
int minPrice = prices[0]; // 记录遍历到目前为止的最低价格
int maxProfit = 0; // 记录遍历到目前为止的最大利润
for (int i = 1; i < prices.size(); i++) {
if (prices[i] < minPrice) { // 当前价格比历史最低价格还低,更新最低价格
minPrice = prices[i];
} else if (prices[i] - minPrice > maxProfit) { // 如果当前价格减去历史最低价格的差大于当前最大利润,更新最大利润
maxProfit = prices[i] - minPrice;
}
}
return maxProfit;
}
以下是本程序的测试示例:
#include <iostream>
#include <vector>
using namespace std;
int maxProfit(vector<int>& prices) {
if (prices.size() < 2) { // 如果数组元素数量小于2,不可能发生交易,直接返回0
return 0;
}
int minPrice = prices[0]; // 记录遍历到目前为止的最低价格
int maxProfit = 0; // 记录遍历到目前为止的最大利润
for (int i = 1; i < prices.size(); i++) {
if (prices[i] < minPrice) { // 当前价格比历史最低价格还低,更新最低价格
minPrice = prices[i];
} else if (prices[i] - minPrice > maxProfit) { // 如果当前价格减去历史最低价格的差大于当前最大利润,更新最大利润
maxProfit = prices[i] - minPrice;
}
}
return maxProfit;
}
int main() {
vector<int> prices1 = {7, 1, 5, 3, 6, 4};
vector<int> prices2 = {7, 6, 4, 3, 1};
cout << "Test Case 1: " << maxProfit(prices1) << endl; // 输出5,因为从第二天买入,第五天卖出,收益为6-1=5
cout << "Test Case 2: " << maxProfit(prices2) << endl; // 输出0,因为不发生交易
return 0;
}
以上示例代码,输出如下:
Test Case 1: 5
Test Case 2: 0
本程序采用贪心算法,时间复杂度为O(n)。通过测试示例验证,可以计算给定股票价格数组的最大利润。