
쉽게 보면 그리디 문제임
근데 대충 그리디 알고리즘 짜면 개망함
2중포문? 개망함ㅇㅇ

이게 제약조건인데 최대 리스트의 길이가 임
2중포문돌면 10억회, 약 10초임
우린 이걸 이 아닌 으로 끝낼 방향을 찾아야함
먼저 문제의 핵심은 다음과 같음
즉, 사는 날의 가격중 가장 싼 날을 찾고, 파는 날의 가격중 가장 비싼 날을 찾으면 됨
그리고 사는 날은 무조건 파는 날보다 빠름
정리해보면 다음과 같음
이걸 코드로 구현하면 다음과 같음
class Solution {
public:
int maxProfit(vector<int>& prices) {
int minP = prices[0];
int max = 0;
for(int p : prices)
{
minp = std::min(minP, p);
max = std::max(max, p - minP);
}
return max;
}
};
어? 싶지?
minP가 사는 날 중 가장 저렴한 값임
그리고 사는 날과 관계없이 파는날 가격에서 가장 싼 값을 뺀 가격중 가장 큰 값을 고르면 됨
만약 [7,1,3]이 있다고 가정해보면
i = 0, minP는 7, max = max(max(0), prices[i] - minP(0))i = 1, minP는 1, max = max(max(0), prices[i] - minP(0))i = 2, minP는 1, max = max(max(0), prices[i] - minP(2))이렇게 minP가 갱신이 되면 max는 무조건 0이 되어,
항상 최대값만을 갱신하는 코드가 완성되는거임