小q在週末的時候和他的小夥伴來到大城市逛街,一條步行街上有很多高樓,共有n座高樓排成一行。
小q從第一棟一直走到了最後一棟,小q從來都沒有見到這麼多的樓,所以他想知道他在每棟樓的位置處能看到多少棟樓呢?(當前面的樓的高度大於等於後面的樓時,後面的樓將被擋住)
輸入描述:
輸入第一行將包含乙個數字n,代表樓的棟數,接下來的一行將包含n個數字wi(1<=i<=n),代表每一棟樓的高度。
1<=n<=100000;
1<=wi<=100000;
輸出描述:
輸出一行,包含空格分割的n個數字vi,分別代表小q在第i棟樓時能看到的樓的數量。
輸入例子1:
65 3 8 3 2 5
輸出例子1:
3 3 5 4 4 4
例子說明1:
當小q處於位置3時,他可以向前看到位置2,1處的樓,向後看到位置4,6處的樓,加上第3棟樓,共可看到5棟樓。當小q處於位置4時,他可以向前看到位置3處的樓,向後看到位置5,6處的樓,加上第4棟樓,共可看到4棟樓。
n =
input()
#6building =
list
(map
(lambda x:
int(x)
,input()
.split())
)#5 3 8 3 2 5
defcount_visible
(build_list)
: builds =
; build_num =
for i in
range
(int
(n)-1)
:if i==0:
)elif build_list[i]
< builds[-1
]:#如果下一建築,比可看到建築的最後乙個矮,肯定不會擋住後面,所以直接加進來
)else
:#如果比最後乙個高,擋住了可看到的最後乙個,那麼就要刪掉,一直刪到擋不住後面
while
len(builds)
>
0and builds[-1
]<= build_list[i]
:del builds[-1
])#別往了把該建築加進來,每一次迴圈到儲存目前可以看到的
len(builds)
)#計數
return[0
]+build_num
left = count_visible(building)
#向左看
right = count_visible(building[::
-1])
[::-
1]#向右看
print
(' '
.join(
[str
(left[i]
+ right[i]+1
)for i in
range
(int
(n))])
)
n =
input()
#6building =
list
(map
(lambda x:
int(x)
,input()
.split())
)#5 3 8 3 2 5
defcount_visible
(build_list, count =0)
:while
len(build_list)
>0:
max_loca = build_list.index(
max(build_list))if
len(build_list[
:max_loca]
)>0:
count +=
1 build_list = build_list[
:max_loca]
else
: count +=
1break
return count
count =
for i in
range
(int
(n))
: left_count = count_visible(building[
:i][::
-1])
right_count = count_visible(building[i+1:
])str(left_count + right_count +1)
)print
(' '
.join(count)
)
n =
input()
#6building =
list
(map
(lambda x:
int(x)
,input()
.split())
)#5 3 8 3 2 5
defcount_visible
(build_list, count =0)
:for i in
range(1
,len
(build_list)):
ifmax
(build_list[
:-i]
)>=build_list[
-i]:
#如果遮住了
continue
else
:#沒遮住,就計數
count +=1if
len(build_list)!=0
: count +=
1return count
count =
for i in
range
(int
(n))
: left_count = count_visible(building[
:i][::
-1])
right_count = count_visible(building[i+1:
])str(left_count + right_count +1)
)print
(' '
.join(count)
)
1、方法1用時:0.022s
2、方法2用時:3.312s
3、方法3用時:33s
python 2020演算法筆試題目 視野爭奪
小q在進行一場競技遊戲,這場遊戲的勝負關鍵就在於能否能爭奪一條長度為l的河道,即可以看作是 0,l 的一條數軸。這款競技遊戲當中有n個可以提供視野的道具 真視守衛,第i個真視守衛能夠覆蓋區間 xi,yi 現在小q想知道至少用幾個真視守衛就可以覆蓋整段河道。輸入描述 輸入包括n 1行。第一行包括兩個正...
python 2020微光 筆試01 分辨復讀機
知識點與收穫 成電微光工作室2020筆試第一題,下一屆想進入微光工作室的成電小夥伴可以來康康。題目給出這樣一段txt檔案 a 小夥子最近怎麼樣 b 最近在參加微光工作室的招新 a 感覺怎樣 b 感覺好多題有點難 a 那咋辦嘛 b 那咋辦嘛 a 那咋辦嘛 b 那咋辦嘛 a 那咋辦嘛 b 那我能咋辦嘛 ...
筆試題 2020華為筆試
i j k p,0測試用例 120,3 12,1 題目描述 乙個矩陣,5 5,取相鄰 二個成員有乙個邊是相同的 的6個,輸入乙個6個成員列表,判斷是否滿足?矩陣成員如下 1,2,3,4,5 11,12,13,14,15 21,22,23,24,25 31,32,33,34,35 41,42,43,4...