又到了豐收的季節,恰逢小易去牛牛的果園裡遊玩。
牛牛常說他對整個果園的每個地方都瞭如指掌,小易不太相信,所以他想考考牛牛。
在果園裡有n堆蘋果,每堆蘋果的數量為ai,小易希望知道從左往右數第x個蘋果是屬於哪一堆的。
牛牛覺得這個問題太簡單,所以希望你來替他回答。
輸入描述:
第一行乙個數n(1 <= n <= 105)。輸出描述:第二行n個數ai(1 <= ai <= 1000),表示從左往右數第i堆有多少蘋果
第三行乙個數m(1 <= m <= 105),表示有m次詢問。
第四行m個數qi,表示小易希望知道第qi個蘋果屬於哪一堆。
m行,第i行輸出第qi個蘋果屬於哪一堆。輸入例子1:
5輸出例子1:2 7 3 4 9
31 25 11
153傻乎乎的又寫了兩層迴圈。。。
import sys
n = sys.stdin.readline(
).split(
)n =
int(n[0]
)).split(
)#每一堆有多少個蘋果
list
(map
(int
)query_times = sys.stdin.readline(
).split(
)query_times =
int(query_times[0]
)# 詢問次數
query = sys.stdin.readline(
).split(
)query =
list
(map
(int
,query)
)# 詢問第幾個蘋果
for i in
range
(query_times):0
for j in
range
(n):
:print
(j+1
)break
結果: 還不如瞌睡呢
執行超時:您的程式未能在規定時間內執行結束,請檢查是否迴圈有錯或演算法複雜度過大。所以感覺網易這些題,都需要至少比o(ncase通過率為30.00%
2)
o(n^2)
o(n2
)複雜度低
不是只找一次,已經有乙個o(n
)o(n)
o(n)
了,那麼查詢演算法應該是去寫二分查詢o(l
ogn)
o(logn)
o(logn
) 才能控制住複雜度的
對每對蘋果的數目做累加。可以得到乙個遞增陣列,然後利用二分查詢法查詢。
n =
int(
input()
)ns =
list
(map
(int
,input()
.split())
)m =
int(
input()
)q =
list
(map
(int
,input()
.split())
)# 累加蘋果堆得到遞增數列
for i in
range(1
,n):
ns[i]
+= ns[i-1]
# 注意這種操作是可以的。迴圈中不會每次算出新的ns[i]就覆蓋掉舊值
# 二分查詢
for item in q:
# 待查的值
l,r =
0,n-
1while l# 終止條件為兩指標相遇
mid =
(l+r)
>>
1# 移位速度快, l+r存在溢位風險
if ns[mid]
# 待查值在中間值的右邊
l = mid+
1# # 因為待查值不會處於中間值所對應的堆,所以+1
else
: r = mid # 待查值在中間值所在堆或者中間值左邊的堆,r最多只能移動到mid,還需要左指標輔助判斷
print
(r+1
)
網易測評題 豐收
又到了豐收的季節,恰逢小易去牛牛的果園裡遊玩。牛牛常說他對整個果園的每個地方都瞭如指掌,小易不太相信,所以他想考考牛牛。在果園裡有n堆蘋果,每堆蘋果的數量為ai,小易希望知道從左往右數第x個蘋果是屬於哪一堆的。牛牛覺得這個問題太簡單,所以希望你來替他回答。輸入描述 第一行乙個數n 1 n 105 第...
網易筆試 豐收
又到了豐收的季節,恰逢小易去牛牛的果園裡遊玩。牛牛常說他對整個果園的每個地方都瞭如指掌,小易不太相信,所以他想考考牛牛。在果園裡有n堆蘋果,每堆蘋果的數量為ai,小易希望知道從左往右數第x個蘋果是屬於哪一堆的。牛牛覺得這個問題太簡單,所以希望你來替他回答。輸入描述 第一行乙個數n 1 n 105 第...
刷題日記 網易 俄羅斯方塊
小易有乙個古老的遊戲機,上面有著經典的遊戲俄羅斯方塊。因為它比較古老,所以規則和一般的俄羅斯方塊不同。熒幕上一共有 n 列,每次都會有乙個 1 x 1 的方塊隨機落下,在同一列中,後落下的方塊會疊在先前的方塊之上,當一整行方塊都被佔滿時,這一行會被消去,並得到1分。有一天,小易又開了一局遊戲,當玩到...