臺(tái)階積水問題

數(shù)組中的每一個(gè)元素相當(dāng)于一個(gè)臺(tái)階,假使水量足夠大,那么臺(tái)階上的積水有多少,例如數(shù)組[0,1,0,1,2,1,0,1,3,2,1,2,1]的臺(tái)階積水量為6,示例圖如下:


image.png

思路:模擬下雨,最低洼的地方最先積水,如1區(qū)域先積滿水,然后2區(qū)域再積滿水

先計(jì)算出所有的臺(tái)階分類,從小到大排序,
遍歷臺(tái)階分類,找到每一級(jí)臺(tái)階之間的洼地,然后積水(使積水 與該級(jí)臺(tái)階持平),然后對(duì)更上一級(jí)臺(tái)階之間的洼地積水,以此類推

尋找洼地就是尋找該級(jí)臺(tái)階在數(shù)組中第一次以及最后一次出現(xiàn)的位置,針對(duì)兩者之間低于該級(jí)的臺(tái)階進(jìn)行積水

Code:

<?php

/**
 * 臺(tái)階積水問題
 * 數(shù)組中的每一個(gè)元素相當(dāng)于一個(gè)臺(tái)階,
 * 假使水量足夠大,那么臺(tái)階上的積水有多少,
 * 例如數(shù)組[0,1,0,1,2,1,0,1,3,2,1,2,1]的臺(tái)階積水量為6
 */

$arr = [0,1,0,1,2,1,0,1,3,2,1,2,1];

function arrayPool(Array $arr) :Int {
    $beforeRain = array_sum($arr);
    $arr2 = array_unique($arr);//所有臺(tái)階的大小分類
    sort($arr2);
    //只有同一級(jí)臺(tái)階或沒有臺(tái)階,則無法積水
    if(count($arr2) <= 1){
        return 0;
    }

    //忽略0級(jí)臺(tái)階
    if($arr2[0] == 0){
        array_shift($arr2);
    }

    $rArr = array_reverse($arr, true);//為了方便查找臺(tái)階最后出現(xiàn)的位置 
    foreach($arr2 as $a){
        $left = array_search($a, $arr);//該級(jí)臺(tái)階第一次出現(xiàn)的位置
        $right  = array_search($a, $rArr);//最后出現(xiàn)的位置
        for($i = $left + 1; $i < $right; $i++){
            if($arr[$i] < $a){
                $arr[$i] = $a;
            }
        }
    }

    $afterRain = array_sum($arr);
    $pool = $afterRain - $beforeRain;
    return $pool;
}

echo arrayPool($arr);

個(gè)人想法請(qǐng)多指教

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,466評(píng)論 0 13
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,621評(píng)論 1 32
  • 基礎(chǔ)篇NumPy的主要對(duì)象是同種元素的多維數(shù)組。這是一個(gè)所有的元素都是一種類型、通過一個(gè)正整數(shù)元組索引的元素表格(...
    oyan99閱讀 5,286評(píng)論 0 18
  • 1,當(dāng)你去和你的用戶聊天的時(shí)候,會(huì)瓜分你的時(shí)間 2,當(dāng)你去和你的領(lǐng)導(dǎo)溝通戰(zhàn)略的時(shí)候,會(huì)瓜分你的時(shí)間 3,當(dāng)你開始著...
    覺醒的夢(mèng)想閱讀 457評(píng)論 1 1
  • 東拉河水聲朗朗 吟唱著那支永不疲倦的歌......改革給農(nóng)民帶來了福音,雙水村的人們看到了農(nóng)村希望的曙光。家里...
    吃彩虹糖閱讀 594評(píng)論 0 1

友情鏈接更多精彩內(nèi)容