Problem From.
https://leetcode.com/problems/best-time-to-buy-and-sell-stock/
오늘 문제는 주어진 배열중의 하나에서 주식을 사고 그 다음에 있는 index 들 중의 하나에서 판다고 가정했을때, 가장 큰 이익을 얻을 수 있는 값을 리턴하는 문제였다.
주어진 배열을 처음부터 끝까지 순회하면서, 최솟값인 min 이익인 profit 을 가지고 각 날짜에서 해당 날짜의 값 - min 이 현재 가지고 있는 profit 보다 크면 교체 해주었다.
그리고 min 값이 해당 날짜의 값보다 크면 그것 역시 교체해주는 식으로 O(N) 의 시간복잡도를 가지는 코드를 만들 수 있었다.
class Solution {
fun maxProfit(prices: IntArray): Int {
var answer = 0
var min = Int.MAX_VALUE
var profit = 0
prices.forEach {
profit = it - min
if(profit > answer) answer = profit
if(it < min) min = it
}
return answer
}
}