C语言解决股票买卖问题:最大利润算法实现

本文将使用C语言实现一个算法来解决经典的股票买卖问题。问题描述如下:

问题描述:

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。

例如:

Prices=[10, 11, 7, 10, 6],最佳交易为 [7, 10],最大利润为 3

测试用例:

Prices=[13, 17, 15, 8, 14, 15, 19, 7, 8, 9]

算法实现

a、问题分析:

给定一只股票的价格数组,要求在最多只允许完成一笔交易的情况下,计算能够获取的最大利润。

b、解题思路分析:

要计算能够获取的最大利润,可以通过遍历价格数组,不断更新最小买入价格和最大利润。

  1. 首先,将最小买入价格设为数组的第一个元素,最大利润设为0。
  2. 然后,从第二个元素开始遍历数组,如果当前价格小于最小买入价格,则更新最小买入价格;
  3. 如果当前价格减去最小买入价格大于最大利润,则更新最大利润。
  4. 最后,返回最大利润即可。

c、完整的代码注释:

#include <stdio.h>

int maxProfit(int* prices, int pricesSize) {
    int minPrice = prices[0]; // 最小买入价格
    int maxProfit = 0; // 最大利润
    
    for (int i = 1; i < pricesSize; i++) {
        // 如果当前价格小于最小买入价格,则更新最小买入价格
        if (prices[i] < minPrice) {
            minPrice = prices[i];
        }
        // 如果当前价格减去最小买入价格大于最大利润,则更新最大利润
        else if (prices[i] - minPrice > maxProfit) {
            maxProfit = prices[i] - minPrice;
        }
    }
    
    return maxProfit;
}

int main() {
    int prices[] = {13, 17, 15, 8, 14, 15, 19, 7, 8, 9};
    int pricesSize = sizeof(prices) / sizeof(prices[0]);
    
    int maxProfit = maxProfit(prices, pricesSize);
    
    printf('最大利润:%d\n', maxProfit);
    
    return 0;
}

输出结果:

最大利润:11

C语言股票买卖问题:最大利润算法实现

原文地址: https://www.cveoy.top/t/topic/pfrF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录