📌  相关文章
📜  股票买入卖出以最大化利润的 C++ 程序(1)

📅  最后修改于: 2023-12-03 15:11:46.450000             🧑  作者: Mango

股票买入卖出以最大化利润的 C++ 程序

简介

本程序用于计算给定数组中股票的最大利润。其核心算法基于贪心思想,时间复杂度为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)。通过测试示例验证,可以计算给定股票价格数组的最大利润。