You are given an array prices
where prices[i]
is the price of a given stock on the ith
day.
Find the maximum profit you can achieve. You may complete as many transactions as you like (i.e., buy one and sell one share of the stock multiple times) with the following restrictions:
- After you sell your stock, you cannot buy stock on the next day (i.e., cooldown one day).
Note: You may not engage in multiple transactions simultaneously (i.e., you must sell the stock before you buy again).
Example 1:
Input: prices = [1,2,3,0,2] Output: 3 Explanation: transactions = [buy, sell, cooldown, buy, sell]
Example 2:
Input: prices = [1] Output: 0
Constraints:
1 <= prices.length <= 5000
0 <= prices[i] <= 1000
This problem is popular in LeetCode
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
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 (ie, buy one and sell one share of the stock multiple times) with the following restrictions: | |
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again). | |
After you sell your stock, you cannot buy stock on next day. (ie, cooldown 1 day) | |
Example: | |
Input: [1,2,3,0,2] | |
Output: 3 | |
Explanation: transactions = [buy, sell, cooldown, buy, sell] | |
*/ | |
public class BestTimeToBuySellStockCoolDown{ | |
public static int maxProfit(int[] prices){ | |
if(prices==null || prices.length<=1){ | |
return 0; | |
} | |
/** | |
there can be two types of profit we need to track | |
sellProf[i] - profit earned by selling on ith day | |
restProf[i] - profit earned by resting on ith day | |
*/ | |
int sellProf = 0; | |
int restProf = 0; | |
int lastProf = 0; | |
for(int i = 1;i<prices.length; i++){ | |
lastProf = sellProf; | |
//the current sellProf is either by selling on ith day or by resting on ith day | |
sellProf = Math.max(sellProf + prices[i] - prices[i-1], restProf); | |
resProf = Math.max(lastProf, restProf); | |
} | |
return Math.max(sellProf, restProf); | |
} | |
public static void main(String args[]){ | |
int[] prices = new int[]{1,2,3,0,2}; | |
System.out.println(maxProfit(prices)); | |
} | |
} |
No comments:
Post a Comment