陣列可以容納多少水 給你出道題

2021-09-07 08:09:12 字數 1270 閱讀 2307

給定乙個陣列a[n],可以畫乙個柱狀圖.天上下了一場大雨,這個柱狀圖裡面盛了很多雨水,問盛了多少體積的雨水.要求只掃瞄一次陣列.

1 2 3 輸出為0

2 1 4 輸出為1

4 1 3 輸出為2

類似快速排序,雙指標移動

import random

def another_data():

return [random.randint(0, 10) for i in range(500)]

def correct_ans(a):

s = 0

for i in range(len(a)):

left = max(a[0:i]) if i > 0 else 0

right = max(a[i + 1:len(a)]) if i < len(a) - 1 else 0

if min(left, right) < a[i]:

continue

else:

s += min(left, right) - a[i]

return s

def mine(a):

s = 0

ans = 0

left, right = 0, len(a) - 1

while left < right:

# print(a,left,right,ans,s)

if a[left] < a[right]:

i = left

while i < right and a[i] <= a[left]:

s += a[i]

i += 1

ans += (i - left) * min(a[left], a[i]) - s

s = 0

left = i

else:

i = right

while i > left and a[i] <= a[right]:

s += a[i]

i -= 1

ans += (right - i) * min(a[right], a[i]) - s

s = 0

right = i

return ans

for i in range(100):

a = another_data()

assert mine(a) == correct_ans(a)

留個課後思考題,如果是乙個二維的陣列,求雨水的體積?如果是n維的陣列呢?n維陣列可以用numpy中的ndarray來表示.

面試題 可以盛放多少水呢?

題目 從這個圖例來看,當我們從左往右掃瞄的時候,可以發現 a,第1,2,3塊牆能形成乙個u型槽,這個槽能蓄水1個單位 b,第1,2,3,4 能蓄水3個單位,包括上一步驟 a 的水,實際上由於牆4的加入在 a 的基礎上增加了2個單位的蓄水,同時可以看出牆4個加入實際上是 和牆1在高度為2的基礎上形成了...

hidden型別的INPUT最多可以容納多少字元

nput預設是沒有限制的,除非你加了maxlength 10這樣就有了。但是提交表單的時候是有限制的,這個也是別人告訴的,沒有試驗過 post基本上沒有限制,限制可能是web server配置的限制,或是由jvm對記憶體的限制 上載內容太大jvm可能會出現記憶體溢位 get方式url?key val...

LeetCode11題 容納最多的水

給你n個非負整數a1,a2,an,每個數代表座標中的乙個點 i,ai 在左邊內畫 n條垂直線,垂直線i的兩個端點分別為 i,ai 和 i,0 找出其中的兩條線,使得他們與x軸共同構成的容器可以容納最多的水。注意 你不能傾斜容器,且n的值至少為2 圖中垂直線代表輸入陣列 1,8,6,2,5,4,3,7...