FRTKL

122. Best Time to Buy and Sell Stock II (Easy)

Problem

https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/

  • Say you have an array prices 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).

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.

Solution

Go

func maxProfit(prices []int) int {
    res := 0
    for i := 1; i < len(prices); i++ {
        if prices[i] > prices[i-1] {
            res += prices[i]-prices[i-1]
        }
    }
    
    return res
}

PHP

class Solution {

    /**
     * @param Integer[] $prices
     * @return Integer
     */
    function maxProfit($prices) {
        $sum = 0;
        $count = count($prices);
        for ($i = 1; $i < $count; $i++) {
            if ($prices[$i] >= $prices[$i-1]) {
                $sum += $prices[$i] - $prices[$i-1];
            }
        }
        return $sum;
    }
}

Impression

  • 総当たりしか理解が難しそうだったので総当たりで。
  • 利益の最大値を求めるのではなく、利益の総和を求めれば良いので、初日(配列の最初の要素)から1日ずつ翌日との差額を足していけばOK
Written By Fukuaki TAKANO
fortkle icon

Engineering Manager at Connehito inc.
Please contact me via twitter. @fortkle