Leetcode 주식 매매

2488 단어 Leetcode
제목 설명
만약 에 네가 배열 이 있다 고 가정 하면 그 중에서 i 번 째 요 소 는 특정한 주식 이 i 일 째 에 있 는 가격 이다.하나의 알고리즘 을 설계 하여 최대 의 이윤 을 구하 다.당신 은 최대 두 번 의 거래 를 할 수 있 습 니 다.주의: 여러 거래 를 동시에 할 수 없습니다.
예시 1
입력
복제 하 다.
[1,4,2]

출력
복제 하 다.
3

사고 1: 주식 의 매입 과 판매 가 교차 되 지 않 기 때문에 반드시 앞 뒤 두 부분 으로 나 누 어 구 매 하 는 것 이 두 단계 이다.
pre [i] 는 0 일부 터 i 일 까지  주식 이 얻 을 수 있 는 최대 차액 이윤.
post [i] 는 i 일부 터 마지막 날 까지 주식 이 얻 을 수 있 는 최대 차익 (역방향 계산 가능) 을 나타 낸다.
 int maxProfit(vector& prices) {
        
        if(prices.size()==0)
            return 0;
        int pre[100000];
        int post[100000];
        for(int i=0;i<100000;i++)
        {
            pre[i]=post[i]=0;
        }
        int min=prices[0];
        for(int i=1;i=0;i--)
        {
            
            post[i]=max(post[i+1],max_-prices[i]);
            if(prices[i]>max_)
                max_=prices[i];//     
        }
        int res=0;
        for(int i=0;ires)
                res=pre[i]+post[i];
        }
        return res;
}

 
 
 
사고방식 2: 네 개의 변수 기록 을 채택 하여 매입 판매  buy1 sell1 buy2 sell2
 
4. 567917. 당신 이 지금 가지 고 있 는 돈 이 0 이 라 고 가정 하 세 요
4. 567917. buy 1 은 첫날 부터 i 일 까지 살 수 있 는 최저 가격 (샀 기 때문에 빚 을 졌 기 때문에 마이너스 로 기록 하기 때문에 max), 4. 567918.
4. 567917. sell 1 은 첫날 부터 i 일 중 어느 날 까지 판매 하면 최대 얼 마 를 벌 수 있 는 지 기록 합 니 다
4. 567917. buy 2 와 sell 2 는 전제 조건 이 있 습 니 다. 당신 이 i 일 전에 첫 번 째 거래 를 했 는 지, 만약 에 진행 했다 면 첫 번 째 거래 의 이윤 으로 계산 하고 있 습 니 다. 그러면 당신 은 첫 번 째 거래 의 이윤 을 가지 고 계산 한 것 입 니 다. 그래서 다음 에 또 거래 를 했다 면 2 번 거래 의 최대 치 입 니 다
4. 567917. 만약 당신 이 i 일 전에 거래 를 하지 않 았 다 면 buy 1 과 buy 2 는 똑 같 습 니 다. sell 1 과 sell 2 는 똑 같 고 변화 가 없습니다
        
 int maxProfit(vector& prices) {
        // write code here
        if(prices.size()==0)
            return 0;
        //         buy1->sell1->buy2->sell2
        int buy1=-10000;
        int buy2=-10000;
        int sell1=0;
        int sell2=0;
        //buy1->sell1 ->buy2 ->sell2 .                     
        for(int i=0;i

좋은 웹페이지 즐겨찾기