給定乙個陣列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...