贪心加动态规划

  • C++版本
class Solution {
public:
    /**
     * 
     * @param prices int整型vector 
     * @return int整型
     */
    int maxProfit(vector<int>& prices) {
      if (prices.empty()) {
        return 0;
      }
      
      int res = 0;
      int min = prices[0];
      
      //  这里买入和卖出不能是同一天,注意语句的顺序
      //  每次比较当天和前n天的差额,取出最大值
      for (int i = 1; i < prices.size(); ++i) {
        res = std::max(res, prices[i] - min);
        min = std::min(min, prices[i]);
      }
      
      return res;
    }
};
class Solution {
public:
    /**
     * 
     * @param prices int整型vector 
     * @return int整型
     */
    int maxProfit(vector<int>& prices) {
      if (prices.empty()) {
        return 0;
      }
      
      //  dp[i] 表示前i天(包括i)在内的最大收益
      std::vector<int> dp(prices.size(), 0);
      int min = prices[0];
      
      for (int i = 1; i < prices.size(); ++i) {
        dp[i] = std::max(dp[i - 1], prices[i] - min);
        min = std::min(min, prices[i]);
      }
      
      return dp[prices.size() - 1];
    }
};

C语言版本

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param prices int整型一维数组 
 * @param pricesLen int prices数组长度
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int maxProfit(int* prices, int pricesLen ) {
  if (pricesLen == 0) {
    return 0;
  }
  int res = 0;
  int min = prices[0];
  
  for (int i = 1; i < pricesLen; ++i) {
    res = res > prices[i] - min ? res : prices[i] - min;
    min = min < prices[i] ? min : prices[i];
  }
  
  return res;
}
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param prices int整型一维数组 
 * @param pricesLen int prices数组长度
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int maxProfit(int* prices, int pricesLen ) {
  if (pricesLen == 0) {
    return 0;
  }
  
  //  dp[i] 表示前i天(包含i)的最大收益
  int dp[pricesLen];
  for (int i = 0; i < pricesLen; ++i) {
    dp[i] = 0;
  }
  int min = prices[0];
  
  for (int i = 1; i < pricesLen; ++i) {
    dp[i] = dp[i - 1] > prices[i] - min ? dp[i - 1] : prices[i] - min;
    min = min < prices[i] ? min : prices[i];
  }
  
  return dp[pricesLen - 1];
}