python 2020演算法筆試題目 逛街

2021-10-04 19:47:22 字數 3218 閱讀 1014

小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...