파이썬 코드
class Solution(object):
def maxProfit(self, prices):
buy = prices[0]
ans = 0
for price in prices:
if price>buy:
ans = max(ans,price-buy)
else:
buy = price
return ans
자바코드
import java.util.*;
class Solution {
public int maxProfit(int[] prices) {
int buy = prices[0];
int ans = 0;
for(int i=1;i<prices.length;i++){
if(prices[i]<buy){
buy = prices[i];
}else{
ans = Math.max(ans,prices[i]-buy);
}
}
return ans;
}
}
buy는 사는 가격이다.
가격이 낮아지는 경우에는 buy를 갱신하고
가격이 높아지면 max()로 이익을 계속 업데이트해준다.
[7,1,5,3,6,4]
위 예제로 원리를 살펴보면
1. buy = 7 / prices[0] = 7 이므로 buy를 7로 업데이트한다.
ans = 0
2. buy = 7 / prices[1] = 1 이므로 가격이 낮아지면 이익이 어차피 존재하지 않으므로 buy를 1로 업데이트한다.
ans = 0
3. buy = 1 / prices[2] = 5 이므로 차익을 기록해둔다.
ans = 4
4. buy = 1 / prices[3] = 3 이므로 차익이 2지만, 기록해둔 4보다 작으므로 기록하지 않는다.
ans = 4
5. buy = 1 / prices[4] = 6 이므로 차익이 5이고 기존 4보다 크므로 업데이트한다.
ans = 5
6. buy = 1 /prices[5] = 4 이므로 차익이 3이고 기존 5보다 작으므로 업데이트 하지 않는다.
결과적으로 답은 5가 나온다.