求解twitter面試題(牆壁裝水問題)

2021-06-28 14:18:56 字數 1170 閱讀 1639

看見twitter上一道面試題,題目是這樣的,試著做了一下

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

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

思路分析:

1.     找出該陣列最大的元素(row);

2.     將該陣列以該最大值為邊界分為左右兩側分別計算;

3.     計算左側

3.1  找出左側最大的值(left_row)

3.2 計算left_row和row之間(left_row的右側到row)的蓄水量,由於該範圍兩個端點的值最大,所以無論中間什麼情況,水的上界和兩個端點較小值是相同的;

3.3 以left_row為新的右側邊界,重複3.1,直到左側到達陣列的最左邊的值

4.     右側方法和左側類似

**驗證(matlab)

生成的隨機數組柱狀圖如下

**:

clc;clear;

%生成隨機數組

n=5;

x=magic(n);

x=reshape(x,1,n*n);

x=[0,x,0]; %邊值為0

[x1,row]=max(x);

rx=x(row:n*n+2);

volume=0;

%最大值左側遍歷

i=row;

while i>3

lx=x(1:i-1);

[x_left, row_left]=max(lx);

calculablev=x(row_left:i);

volume=calculatev(calculablev)+volume;

i=row_left;

end%最大值右側遍歷

i=row;

while i= x(b)

want=b;

else

want=1;

endfor i=2:b-1

v=v+x(i);

endvolume=x(want)*(b-2)-v;

end

驗證結果:

volume=219

面試題 盛水 twitter

用a i 表示第i個牆的高度,牆的個數記為n 思考 1 兩個牆x,y之間可以盛水的條件是a x a y 是a x.y 中的前兩大數 2 如果a 1.x 1 中存在a i a x 那麼用k來替代x並不會使a x.y 中盛水減少,同樣如果a y 1.n 中存在a j a y 可以用j替代y不會使a x....

面試題 PHP面試題

建議 比如是系統配置,缺少了無法執行,自然使用 require 如果某一段程式少了,只是少了統計 訪問的,不是必不可少的。可以使用 include 而加不加 once 就是效率上的區別,雖然系統會幫你考慮只包含一次,但系統的判斷會降低效率,因此,更應該在開發之初,把目錄結構調整高好,盡量不使用 on...

系統設計面試題 實現Twitter時間線和搜尋

設計facebook feed和設計facebook搜尋都是類似的問題。收集需求並確定問題的範圍。提出問題以澄清用例和約束。討論假設。如果沒有面試官來回答明確的問題,我們將定義一些用例和約束。總則時間線 搜尋每月150 tb新內容 每秒10萬個讀取請求 每秒6000條推文 每秒擴散6萬條推文 每秒4...