分析题目,这个题目其实就是判断何时买入卖出,根据逻辑常识我们也知道应该在谷底买入,峰值卖出,把逻辑表达为程序,就是这样。其实这道题目属于贪心算法,每步取最优方案,就可以得到总问题的最优解。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res=0;
bool stock = false;
for(int i=0;i<prices.size();i++){
if(!stock&&i!=prices.size()-1&&prices[i]<=prices[i+1]&&(i==0||prices[i]<=prices[i-1])){
res=res-prices[i]; //股价处于谷底买入
cout << "in" << i <<endl;
stock=true;
}else if(stock){
if((i==prices.size()-1||prices[i]>=prices[i+1])&&prices[i]>=prices[i-1]){
res=res+prices[i]; //处于峰时卖出
cout << "out" << i << endl;
stock=false;
}
}
}
if(res>0) return res;
return 0;
}
};
看来大家都是用这个方法解的,前两次提交得分是10%,第三次就到了100%