【Jobs】阿里算法實(shí)習(xí)生筆試——墻之間積水體積

題目描述

初步分析

情況1:未遇到全局最大值之前
該情況只需要保存現(xiàn)在的截止目前的臨時(shí)最大值tempMax签餐,然后積水體積是tempMax-height[i]。

情況2:已經(jīng)遍歷過(guò)了全局最大值,后面的數(shù)值雖然有局部極值,但沒(méi)有再出現(xiàn)全局最大值

情況3:已經(jīng)遇到全局最大值,但是遇到了第二個(gè)極值比之前遇到的第一個(gè)極值要大晌梨,那么積水的體積就是全局最大值和第二次的遇到的極值(即次大值)之間的容積了
總結(jié)情況2和情況3,在第三次遇到的極值要和次大值比較须妻。

情況4:其實(shí)這里和情況1是一樣的
為什么這里會(huì)列出來(lái)這個(gè)呢仔蝌?
因?yàn)轭}目要求只能遍歷一次數(shù)組,我們不確定在一次遍歷的過(guò)程中是不是還能碰到全局最大值荒吏,所以敛惊,這里考慮局部極值和全局最大值的關(guān)系就顯得尤為重要。
相比情況2和情況3绰更,在第三次遇到的極值要和最大值比較瞧挤。

我們要在一次遍歷的過(guò)程中判斷局部極值點(diǎn)锡宋,然后比較局部極值點(diǎn)和暫時(shí)的最大值和次大值的大小關(guān)系,根據(jù)不同的情況來(lái)做出相應(yīng)的動(dòng)作特恬。

反其道而行之

上面的分析看似把情況都考慮到了执俩,但這使得問(wèn)題擴(kuò)散開(kāi)來(lái)。尤其是當(dāng)階段性的極值不是最大值也不是次大值的情況就無(wú)法解決癌刽。所以役首,我們應(yīng)該反其道而行之,換個(gè)角度來(lái)簡(jiǎn)化問(wèn)題妒穴。
我們一直在考慮當(dāng)遇到最大值之后宋税,如何進(jìn)行比較來(lái)計(jì)算后續(xù)的蓄水容積的情況摊崭,但這樣不如從最后設(shè)定一個(gè)下標(biāo)來(lái)反向計(jì)算讼油。于是這就形成了解決這個(gè)問(wèn)題的核心思路:分別從頭尾設(shè)置兩個(gè)下標(biāo)i,j呢簸,首先比較這兩個(gè)下標(biāo)對(duì)應(yīng)的值的大小矮台,由對(duì)應(yīng)值小的那個(gè)下標(biāo)先移動(dòng),并記錄該下標(biāo)的當(dāng)前的臨時(shí)最大值(比如i先移動(dòng)根时,記錄i_max)瘦赫,當(dāng)遇到一個(gè)新的最大值的時(shí)候,不但要對(duì)i進(jìn)行局部變量的清零蛤迎,還要比較該最大值與j所對(duì)應(yīng)值的大小關(guān)系确虱,然后較小值對(duì)應(yīng)的下標(biāo)繼續(xù)移動(dòng),直到兩個(gè)下標(biāo)相遇替裆,遍歷了一遍數(shù)組為止校辩。

程序代碼

int Volume(int* height, int n)
{
    int i = 0;
    int j = n-1;
    int i_max = height[i];
    int j_max = height[j];
    int volume = 0;
    const int i_walk = 1;
    const int j_walk = 2;
    //i_max <= j_max , i先走
    int who_walk = i_max <= j_max ? i_walk : j_walk;
    
    while(i != j)
    {
        if(who_walk == i_walk)
        {
            if(i_max > height[i])
            {
                volume += i_max-height[i];
            }
            else
            {
                i_max = height[i];
                if (i_max > j_max)
                {
                    who_walk = j_walk;
                    continue;
                }
            }
            ++i;
        }
        else if(who_walk == j_walk)
        {
            if(j_max > height[j])
            {
                volume += j_max-height[j];
            }
            else
            {
                j_max = height[j];
                if (j_max >= i_max)
                {
                    who_walk = i_walk;
                    continue;
                }
            }
            --j;
        }
    }
    return volume;
}

轉(zhuǎn)載請(qǐng)注明作者Jason Ding及其出處
GitCafe博客主頁(yè)(http://jasonding1354.gitcafe.io/)
Github博客主頁(yè)(http://jasonding1354.github.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
簡(jiǎn)書主頁(yè)(http://www.reibang.com/users/2bd9b48f6ea8/latest_articles)
百度搜索jasonding1354進(jìn)入我的博客主頁(yè)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辆童,隨后出現(xiàn)的幾起案子宜咒,更是在濱河造成了極大的恐慌,老刑警劉巖把鉴,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件故黑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡庭砍,警方通過(guò)查閱死者的電腦和手機(jī)场晶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)怠缸,“玉大人诗轻,你說(shuō)我怎么就攤上這事】瘢” “怎么了概耻?”我有些...
    開(kāi)封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵使套,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鞠柄,道長(zhǎng)侦高,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任厌杜,我火速辦了婚禮奉呛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘夯尽。我一直安慰自己瞧壮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布匙握。 她就那樣靜靜地躺著咆槽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪圈纺。 梳的紋絲不亂的頭發(fā)上秦忿,一...
    開(kāi)封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音蛾娶,去河邊找鬼灯谣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蛔琅,可吹牛的內(nèi)容都是我干的胎许。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼罗售,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辜窑!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起莽囤,我...
    開(kāi)封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谬擦,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后朽缎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惨远,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年话肖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了北秽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡最筒,死狀恐怖贺氓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情床蜘,我是刑警寧澤辙培,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布蔑水,位于F島的核電站,受9級(jí)特大地震影響扬蕊,放射性物質(zhì)發(fā)生泄漏搀别。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一尾抑、第九天 我趴在偏房一處隱蔽的房頂上張望歇父。 院中可真熱鬧,春花似錦再愈、人聲如沸榜苫。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)垂睬。三九已至,卻和暖如春府适,著一層夾襖步出監(jiān)牢的瞬間羔飞,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工檐春, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人么伯。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓疟暖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親田柔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子俐巴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,117評(píng)論 25 707
  • 又是一年端午節(jié)。 今年的端午過(guò)得不同往日硬爆。畢竟欣舵,在學(xué)校里,端午節(jié)是個(gè)直接被忽視的節(jié)日缀磕。大家感興趣的只是三天假期缘圈。 ...
    胖鱸魚閱讀 506評(píng)論 6 11
  • 每個(gè)人都有屬于自己的一片森林,也許我們從來(lái)不曾去過(guò)袜蚕,但它一直在那里糟把,總會(huì)在那里。迷失的人迷失了牲剃,相逢的人會(huì)再相逢遣疯。...
    羅生楷閱讀 749評(píng)論 3 10
  • 這周我終于把所有的特長(zhǎng)學(xué)完啦!這下我可輕松多啦凿傅,街舞考級(jí)完啦缠犀,在周六早上終于把街舞的考級(jí)考完啦数苫,這下我可以認(rèn)真的看...
    23班張昌奇閱讀 363評(píng)論 0 1
  • 一匹置身于知識(shí)殿堂的馬。喜歡這家書店的設(shè)計(jì)感
    笑點(diǎn)滴滴閱讀 109評(píng)論 0 0