Best Time to Buy and Sell Stock
Obtienes el precio de una acción a lo largo de una serie de días, un precio por día. Puedes comprar una acción un día y venderla en un día posterior. La ganancia es el precio de venta menos el precio de compra, y quieres obtener la mayor ganancia posible. Si todas las operaciones te harían perder dinero, simplemente no operas y ganas 0.
Considera los precios [7, 2, 5, 9, 1, 4]. Comprar a 2 el día 1 y vender a 9 el día 3 genera 7, y ningún otro par de días da un resultado mejor. Comprar a 1 el día 4 parece tentador porque es el día más barato, pero el único día posterior permite vender a 4, así que esa operación solo genera 3.
Probar todos los pares de días funciona, pero es demasiado lento para listas de precios largas. En cambio, puedes hacerlo recorriendo los días una sola vez. Si vendes hoy, el mejor día para haber comprado es el día más barato hasta ahora, así que ve guardando ese precio mínimo. La mejor ganancia de hoy es el precio de hoy menos el precio mínimo, y la respuesta es la mayor de esas ganancias.
Escribe una función llamada maxProfit que reciba una lista de números enteros prices, donde prices[i] es el precio de la acción en el día i, y devuelva la mayor ganancia que puedes obtener comprando un día y vendiendo en un día posterior. Si ninguna operación genera ganancias, devuelve 0.
Restricciones: 1 ≤ prices.length ≤ 10^5, 0 ≤ prices[i] ≤ 10^4.
Función
- arg1integer-array
- Devuelveinteger
Ejemplos
- Entrada
- arg1 = [7, 2, 5, 9, 1, 4]
- Salida
- 7
- Entrada
- arg1 = [9, 7, 4, 3, 1]
- Salida
- 0
+12 pruebas ocultas al enviar
Pistas
Ábrelas de una en una. Cada una revela un poco más.
La venta siempre ocurre después de la compra. Elige un día para vender: ¿qué día de compra genera más ganancias?
Para un día de venta determinado, el mejor día para comprar es el día más barato anterior. No tienes que volver a buscar ese día cada vez si lo recuerdas mientras avanzas.
Recorre los días en orden y mantén dos números: el precio más bajo hasta el momento y la mejor ganancia hasta el momento. Cada día, compara el precio de hoy menos el precio más bajo con la mejor ganancia y, después, actualiza el precio más bajo.
Pronto habrá una explicación completa de este problema.
Problemas similares
Problemas que usan las mismas ideas. Resolver dos o tres es lo que fija un patrón.
Python
def maxProfit(prices):
# Escribe el código aquíCaso 1
Caso 2
Entrada
arg1 = [7, 2, 5, 9, 1, 4]
Esperado
7