别人的代码:
public int maxProfit(int[] prices) {
int maxProfit = 0;
for (int i = 0; i < prices.length ; i ++ ){
if (i+1<prices.length && prices[i+1] – prices[i] > 0 )
maxProfit += prices[i+1] – prices[i] ; }
return maxProfit;
}
我的代码:
public int maxProfit(int[] prices) {
boolean flag=false;
int sum=0;
int fast=0,slow=0;
for(int i=0;i<prices.length;i++){
if(i+1<prices.length){
fast=fast+1; //错误一 fast写成slow
}
if((prices[slow]<prices[fast])&&!flag){
flag=true;
}
else if(flag&&prices[fast-1]>prices[fast]){ //错误二 递增无法执行这步
sum+=prices[fast-1]-prices[slow];
flag=false;
slow=fast;
}
else
{
slow++;
}
}
return sum;
}
解题思路不够清晰,而且还存在错误,因为之前没有考虑到。
别人的代码,只需要考虑后一天比前天大,就计算利益,而我的需要一直找到,利益最大的那天才进行计算,这样就会多出许多的逻辑判断,虽然这样的思路比较平常,但是实现比较麻烦,而别人的代码使用了这个技巧,省去了这些麻烦的步骤,思路很清晰,简单。