[leetcode]买卖股票的最佳时机 II

别人的代码:

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;

    }

解题思路不够清晰,而且还存在错误,因为之前没有考虑到。

别人的代码,只需要考虑后一天比前天大,就计算利益,而我的需要一直找到,利益最大的那天才进行计算,这样就会多出许多的逻辑判断,虽然这样的思路比较平常,但是实现比较麻烦,而别人的代码使用了这个技巧,省去了这些麻烦的步骤,思路很清晰,简单。


点赞