Leetcode PHP題解--D109 122. Best Time to Buy and Sell Stock II

D109 122. Best Time to Buy and Sell Stock II

題目連接

122. Best Time to Buy and Sell Stock IIphp

題目分析

給定一個數組,表明商品價格。從給定的數組中,計算經過買賣能得到的最大收益。只有賣出才能再買入。算法

思路

一開始覺得是獲取最小值右邊的最大值去賣出。數組

後來發現規律,是在價格拐點進行買入賣出操做。函數

即,先單調遞減後單調遞增時買入,先單調遞增後單調遞減時賣出。.net

最終代碼

<?php
class Solution {

    /**
     * @param Integer[] $prices
     * @return Integer
     */
    function maxProfit($prices) {
        $profit = 0;
        $buyIndex = -1;
        $days = count($prices);
        $increasing = ($prices[0]<$prices[1]);
        if($increasing){
            $buyIndex = 0;
        }
        for($i=1; $i<$days; $i++){
            //if is increasing perviously
            if($increasing){
                //but starts to decrease
                //than its time to sell
                if($prices[$i]>$prices[$i+1]){
                    if($buyIndex != -1 ){
                        $profit += $prices[$i]-$prices[$buyIndex];
                    }
                    $buyIndex = $i+1;
                    $increasing = false;
                }
            }
            else{ //decreasing
                //starts 
                if($prices[$i]<$prices[$i+1]){
                    $buyIndex = $i;
                    $increasing = true;
                }
            }
        }
        return $profit;
    }
}

我我的認爲這個函數並無使用很複雜的算法,可是隻戰勝了28.36%。內存佔用只戰勝了15.79%。有很大的改進空間。code

若以爲本文章對你有用,歡迎用愛發電資助。內存

相關文章
相關標籤/搜索