122. Best Time to Buy and Sell Stock II

Medium

Problem Description

You are given an integer array prices where prices[i] is the price of a given stock on the ith day.

On each day, you may decide to buy and/or sell the stock. You can only hold at most one share of the stock at any time. However, you can buy it then immediately sell it on the same day.

Find and return the maximum profit you can achieve.

Examples

Example 1:
Input: prices = [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.
Total profit is 4 + 3 = 7.

Example 2:
Input: prices = [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.
Total profit is 4.

Example 3:
Input: prices = [7,6,4,3,1]
Output: 0
Explanation: No transactions are done and the max profit = 0.
Jump to Solution: Python Java C++ JavaScript C#

Python Solution


def maxProfit(prices: List[int]) -> int:
    profit = 0
    
    # Iterate through the array starting from second element
    for i in range(1, len(prices)):
        # If current price is higher than previous price
        # we can make profit by buying yesterday and selling today
        if prices[i] > prices[i-1]:
            profit += prices[i] - prices[i-1]
    
    return profit

Java Solution


class Solution {
    public int maxProfit(int[] prices) {
        int profit = 0;
        
        // Iterate through the array starting from second element
        for (int i = 1; i < prices.length; i++) {
            // If current price is higher than previous price
            // we can make profit by buying yesterday and selling today
            if (prices[i] > prices[i-1]) {
                profit += prices[i] - prices[i-1];
            }
        }
        
        return profit;
    }
}

C++ Solution


class Solution {
public:
    int maxProfit(vector& prices) {
        int profit = 0;
        
        // Iterate through the array starting from second element
        for (int i = 1; i < prices.size(); i++) {
            // If current price is higher than previous price
            // we can make profit by buying yesterday and selling today
            if (prices[i] > prices[i-1]) {
                profit += prices[i] - prices[i-1];
            }
        }
        
        return profit;
    }
};

JavaScript Solution


/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function(prices) {
    let profit = 0;
    
    // Iterate through the array starting from second element
    for (let i = 1; i < prices.length; i++) {
        // If current price is higher than previous price
        // we can make profit by buying yesterday and selling today
        if (prices[i] > prices[i-1]) {
            profit += prices[i] - prices[i-1];
        }
    }
    
    return profit;
};

C# Solution


public class Solution {
    public int MaxProfit(int[] prices) {
        int profit = 0;
        
        // Iterate through the array starting from second element
        for (int i = 1; i < prices.Length; i++) {
            // If current price is higher than previous price
            // we can make profit by buying yesterday and selling today
            if (prices[i] > prices[i-1]) {
                profit += prices[i] - prices[i-1];
            }
        }
        
        return profit;
    }
}

Complexity Analysis

Solution Explanation

This solution uses a greedy approach:

Key points: