# 122 Best Time to Buy and Sell Stock II

不要被題目騙了而拘泥在他的想法下 ,要把重點放在 input 什麼跟 output 什麼上

LeetCode

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete as many transactions as you like 
(i.e., buy one and sell one share of the stock multiple times).

Note: You may not engage in multiple transactions at the same time 
(i.e., you must sell the stock before you buy again).

input: 一組數字陣列代表某一個股票在七天內的價錢
output: 算出最大收益,跟前一題不一樣的是你 can make multiple transactions 
Example 1:

Input: [7,1,5,3,6,4]
Output: 7
Explanation: Buy on day 2 (price = 1) and sell on day 3 (price = 5), profit = 5-1 = 4.
             Then buy on day 4 (price = 3) and sell on day 5 (price = 6), profit = 6-3 = 3.
Example 2:

Input: [1,2,3,4,5]
Output: 4
Explanation: Buy on day 1 (price = 1) and sell on day 5 (price = 5), profit = 5-1 = 4.
             Note that you cannot buy on day 1, buy on day 2 and sell them later, as you are
             engaging multiple transactions at the same time. You must sell before buying again.
Example 3:

Input: [7,6,4,3,1]
Output: 0
Explanation: In this case, no transaction is done, i.e. max profit = 0.

/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function(prices) {}

怎麼解

基本上他是回傳 profit ,所以只要下一個值比這現在大就可以買賣.以 [1,2,3,4,5] 來說,你可以

  • 第一天買,第五天賣,賺 4 元,也可以

  • 分別買賣總共有事賺 4 元

    • buy day 1, sell day 2, profit = 1

    • buy day 2, sell day 3, profit = 1

    • buy day 3, sell day 4, profit = 1

    • buy day 4, sell day 5, profit = 1

var maxProfit = function(prices) {
  let benefit = 0;
  let pointer = 0;
  for(let i = 1; i < prices.length; i++){
      if(prices[i] - prices[pointer] > 0){
          // if next value > current, have benefit
          benefit += prices[i] - prices[pointer]
      }
      pointer ++;
      
  }
  return benefit;
};

學到什麼

不要被題目騙了而拘泥在他的想法下 ,要把重點放在 input 什麼跟 output 什麼上

Last updated