PHP——將每個元素替換爲右側最大元素

leecode上看到的一道題

給你一個數組 arr ,請你將每個元素用它右邊最大的元素替換,如果是最後一個元素,用 -1 替換。

完成所有替換操作後,請你返回這個數組。

 

示例:

輸入:arr = [17,18,5,4,6,1]
輸出:[18,6,6,6,1,-1]

 

第一種解法:php內置函數

function replaceElements($arr) {
    $newarr = array();
    for ($i=0;$i<count($arr);$i++) {
        $end = max(array_slice($arr,$i+1));
        $newarr [$i] = $end==false?'-1':$end;
    }
    return $newarr;
}

這個方法耗時很長,主要是方便……

第二種,從左往右依次對比,兩個循環,時間複雜度O(N^2)

function replaceElements($arr) {
    for ($i=0;$i<count($arr);$i++) {
        $max = -1;
        for($j=$i+1;$j<count($arr);$j++) {
            if ($max<$arr [$j]) {
                $max = $arr[$j];
            }
        }
        $arr [$i] = $max;
    }
    return $arr;
}

好不到哪去,畢竟是2個循環,不過比內置函數好多了,畢竟內置函數底層也那麼多的循環

第三種,從右往左,一個循環 時間複雜度 O(1)

1.先將最後一個元素設爲當前最大值
2.從倒數第二個元素開始遍歷,首先先將當前元素保存到零時變量temp
3.將當前位置修改爲當前最大值
4.比較如果temp大於當前保存的最大值,則修改當前最大值爲temp
5.遍歷完成爲修改最後一個元素爲-1

(minsheng)

function replaceElements($arr) {
    $max = -1;// 當前最大值
    for ($i=count($arr)-1;$i>-1;$i--) {
        $temp = $arr[$i];
        $arr [$i] = $max;
        if ($temp>$max) {
            $max = $temp;
        }
    }
    return $arr;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章