122. 买卖股票的最佳时机 II

题目分析

LeetCode 第 122 题是“买卖股票的最佳时机 II”。题目描述为:给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

模式识别

本题属于动态规划或者贪心算法的范畴。由于可以进行多次交易,且没有交易次数限制,所以可以通过比较相邻两天的价格,只要后一天价格比前一天高,就进行一次交易,这符合贪心算法的思想。

考点分析
  • 贪心算法:理解贪心策略,即只要有利润就进行交易,从而获取最大总利润。
  • 数组遍历:需要遍历数组来比较相邻元素的值。

所有解法

  1. 贪心算法:只要后一天的价格比前一天高,就进行交易,累加利润。
  2. 动态规划:定义状态和状态转移方程来求解最大利润。

最优解法(贪心算法)的 C 语言代码

#include 

// 函数用于计算最大利润
// 参数 prices 是一个整数数组,表示每天的股票价格
// 参数 pricesSize 是数组 prices 的长度
int maxProfit(int* prices, int pricesSize) {
    // 初始化最大利润为 0
    int max_profit = 0;
    // 从数组的第二个元素开始遍历
    for (int i = 1; i < pricesSize; i++) {
        // 如果当前元素大于前一个元素,说明可以进行一次交易
        if (prices[i] > prices[i - 1]) {
            // 累加利润
            max_profit += prices[i] - prices[i - 1];
        }
    }
    // 返回最大利润
    return max_profit;
}    

复杂度分析

  • 时间复杂度 O ( n ) O(n) O(n),其中 n n n 是数组 prices 的长度。只需要遍历一次数组。
  • 空间复杂度 O ( 1 ) O(1) O(1),只使用了常数级的额外空间。

你可能感兴趣的:(LeetCode,算法)