C++算法题解:寻找股票交易最佳时机

本文将分析一段C++代码,该代码旨在计算股票交易的最大利润。我们发现了原始代码中存在两个问题,并提供了相应的修正方法。

**原始代码:**cpp#include #include

class Solution {public: int maxProfit(vector& prices) { if(prices.size() > 2){ auto max_num = max_element(prices.rbegin()+1, prices.rend()); auto max_index = distance(prices.begin(),max_num); auto min_num = min_element(prices.begin(),max_num); if(min_num[0] < max_num[0]){ return max_num[0] - min_num[0]; } }else{ if(prices.size() == 1){ return 0; } if(prices[0] < prices[1]){ return prices[1] - prices[0]; } } return 0; }};

问题分析:

  1. 缺少命名空间前缀: 代码中使用了 vector<int>,但没有指定命名空间 std::

  2. 数组元素的访问方式有问题: 代码中使用 min_num[0]max_num[0] 访问数组元素,这是错误的。应该使用解引用操作符 *,即 *min_num*max_num

**修正后的代码:**cpp#include #include

class Solution {public: int maxProfit(std::vector& prices) { if (prices.size() > 2) { auto max_num = std::max_element(prices.rbegin() + 1, prices.rend()); auto max_index = std::distance(prices.begin(), max_num); auto min_num = std::min_element(prices.begin(), max_num); if (*min_num < *max_num) { return *max_num - *min_num; } } else { if (prices.size() == 1) { return 0; } if (prices[0] < prices[1]) { return prices[1] - prices[0]; } } return 0; }};

代码解释:

  • std::vector<int>& prices: 使用引用传递参数可以避免复制整个向量,提高效率。* std::max_element(prices.rbegin() + 1, prices.rend()): 查找 prices 向量中从倒数第二个元素到最后一个元素之间的最大值。* std::distance(prices.begin(), max_num): 计算 max_numprices 向量中的索引。* std::min_element(prices.begin(), max_num): 查找 prices 向量中从第一个元素到 max_num 之间的最小值。

总结:

通过添加命名空间前缀和使用正确的数组元素访问方式,我们修正了原始代码中的错误。修正后的代码能够正确地计算股票交易的最大利润。

C++算法题解:寻找股票交易最佳时机

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

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