Use DP, which I learn from the discuss https://leetcode.com/discuss/48151/my-c-solution-o-n-time-o-1-space-8ms.
class Solution {
public:
int maxProfit(vector<int>& prices) {
int state[2][4]={INT_MIN,0,INT_MIN,0};
int len=prices.size(),last=0,curr=1;
for(int i=0;i<len;i++)
{
state[curr][0]=max(state[last][0],-prices[i]);//one buy
state[curr][1]=max(state[last][1],state[last][0]+prices[i]);//one buy one sell
state[curr][2]=max(state[last][2],state[last][1]-prices[i]);//two buy one sell
state[curr][3]=max(state[last][3],state[last][2]+prices[i]);//two buy two sell
swap(curr,last);
}
return max(state[last][1],state[last][3]);
}
};