Supongamos que tiene una matriz para la que el i-ésimo elemento es el precio de una acción determinada el día i.
Diseñe un algoritmo para encontrar el máximo beneficio. Puede completar tantas transacciones como desee (es decir, comprar una y vender una acción varias veces). Sin embargo, no puede realizar varias transacciones al mismo tiempo (es decir, debe vender las acciones antes de volver a comprar).
Análisis
Este problema puede verse como encontrar todas las secuencias ascendentes. Por ejemplo, dado {5, 1, 2, 3, 4}, comprar a 1 y vender a 4 es lo mismo que comprar a 1 y vender a 2 y comprar a 2 y vender a 3 y comprar a 3 y vender a 4.
Podemos escanear la matriz una vez y encontrar todos los pares de elementos que están en orden ascendente.
Solución Java
public int maxProfit(int[] prices) { int profit = 0; for(int i=1; i<prices.length; i++){ int diff = prices[i]-prices[i-1]; if(diff > 0){ profit += diff; } } return profit; } |