[122] 买卖股票的最佳时机 II

34 阅读1分钟

思路:

  • 1.定义最大利润和i为0,最大价格和最小价格为数组的第一个元素
  • 2.跌:循环第i位的价格大于下一位的价格就继续i++,小于则是这一次下跌的最低价格,min = prices[i]
  • 3.涨:循环第i位的价格小于下一位的价格就继续i++,大于则是这一次下跌的最低价格,max = prices[i]
  • 4.利润=最大价格-最小价格
/*
 * @lc app=leetcode.cn id=122 lang=javascript
 *
 * [122] 买卖股票的最佳时机 II
 */

// @lc code=start
/**
 * @param {number[]} prices
 * @return {number}
 * 1.定义最大利润和i为0,最大价格和最小价格为数组的第一个元素
 * 2.跌:循环第i位的价格大于下一位的价格就继续i++,小于则是这一次下跌的最低价格,min = prices[i]
 * 3.涨:循环第i位的价格小于下一位的价格就继续i++,大于则是这一次下跌的最低价格,max = prices[i]
 * 4.利润=最大价格-最小价格
 */
var maxProfit = function (prices) {
  if (prices.length === 0) {
    return 0
  }
  let maxProfit = 0,
    min = prices[0],
    max = prices[0],
    i = 0
  while (i < prices.length - 1) {
    // 跌
    while (i < prices.length - 1 && prices[i] >= prices[i + 1]) {
      i++
    }
    min = prices[i]
    // 涨
    while (i < prices.length - 1 && prices[i] <= prices[i + 1]) {
      i++
    }
    max = prices[i]
    maxProfit += max - min
  }
  return maxProfit
}
// @lc code=end