水溝添水問題

2021-06-29 13:28:35 字數 1436 閱讀 5374

之前在csdn看到過這道題,感覺挺有趣的,之後又遇到了,這裡分享一下相關問題的解法。(試題分析參考:

我的twitter技術面試失敗了)

看下面這個」

「在這個裡我們有不同高度的牆。這個由乙個整數陣列所代表,陣列中每個數是牆的高度。上邊的圖可以表示為陣列[2,5,1,2,3,4,7,7,6]」

「假如開始下雨了,那麼牆之間的水坑能夠裝多少水呢?」

「以1×1的方塊為單位計算容積。所以,在上邊的圖中下標為1以左的都會漏掉。下標7以右的也會漏掉。剩下的只有在1和6之間的一坑水,容積是10」

邏輯如下:

如果我們從左至右遍歷列表,每個下標水的量最多是到現在為止最大的數。這表示如果我們已知右邊有相等或更大的,我們可以知道存下的水有多少。反向遍歷的時候也一樣:如果我們知道左邊有比右邊最大的數更大的,我們裝水是毫無問題的。

基於這個想法,乙個解決方法是:先找到最大值,從左遍歷到最大值,然後從右遍歷到最大值。這個方法需要兩次遍歷:一次找到最大值,另一次分成了兩個子遍歷。

一次遍歷的方法通過兩端的指標相向移動避免了尋找最大值。如果(左指標找到的左指標以左的最大值)小於(右指標找到右指標以右的最大值),將左指標向右移動一位。否則右指標向左移動一位。重複過程直到兩個指標相遇。(解釋起來很麻煩,但是**很簡單)

相關**可以參考:

其中c++:

/* 

* cugbabybear

*/#include "stdio.h"

int volume_calcuate(int,int);

int main(int argc, char const *argv);

int testcase_2[10] = ;

int testcase_3[9] = ;

printf("case testcase_1 total volume : %i\n",volume_calcuate(testcase_1,9));

printf("case testcase_2 total volume : %i\n",volume_calcuate(testcase_2,10));

printf("case testcase_3 total volume : %i\n",volume_calcuate(testcase_3,9));

return 0;

}int volume_calcuate(int walls , int length)else

}else

else}}

return total_volume;

}



語言求不相鄰水坑問題 排水溝 集水坑我是這樣處理的

在廣聯達建模中我們常常會遇到一些零星構件,而這些構件在廣聯達列表中又無法找到與之相對應的構件,例如排水溝 今天就來講講廣聯達gtj2018中排水溝處理的思路。一 案例介紹 排水溝分有配筋的排水溝和沒有配筋的排水溝,沒有配筋的排水溝在軟體中可以找到地溝的構件定義,或者直接在圖紙中量取長度手算,比較簡單...

洛谷P2265 路邊的水溝

lyq市有乙個巨大的水溝網路,可以近似看成乙個n m的矩形網格,網格的每個格點都安裝了閘門,我們將從水溝網路右下角的閘門到左上角的閘門的一條路徑稱為水流。現給定水溝網的長和寬,求該水溝網中所有只包含向左和向上移動的水流數量。輸入共1行,包含兩個整數n和m。輸出乙個數字ans,即水流的數量。由於答案可...

洛谷P2265 路邊的水溝

lyq市有乙個巨大的水溝網路,可以近似看成乙個n m的矩形網格,網格的每個格點都安裝了閘門,我們將從水溝網路右下角的閘門到左上角的閘門的一條路徑稱為水流。現給定水溝網的長和寬,求該水溝網中所有只包含向左和向上移動的水流數量。輸入共1行,包含兩個整數n和m。輸出乙個數字ans,即水流的數量。由於答案可...