合唱隊的n名學生站成一排依次編號為1-n,先要求在編號連續的前提下,將學生按照身高進行分組,要求每組的最矮的同學要比上一組最高的同學要高或者相等。問最大可以分成幾組。解題思路:遍歷陣列,記錄當前區間的最大值與最小值。輸入:
第一行: 人數
第二行: 每個人的身高
輸出:
最大的分組數
如:輸入:
2 1 3 2
輸出:解釋:
[2,1,3,2]->[[2,1], [3,2]]
# -*- coding: utf-8 -*-
'''京東筆試題:
給定乙個陣列,求陣列最大可以分成多少個子陣列。
如a = [2, 1, 3, 2]可以分為:[[2, 1], [3, 2]]
'''def
maxgroup
(n, a)
: area =
[[a[0]
, a[0]
]]for i in
range(1
, n)
:# 如果當前值大於當前區間的最大值,記錄區間資訊,並新開乙個區間
if a[i]
>= area[-1
][1]
:[a[i]
, a[i]])
else
:# 當前值小於當前區間最大值
iflen
(area)
>
1and a[i]
>= area[-2
][1]
:# 大於上乙個區間的最大值
# 更新當前區間
area[-1
][0]
=min
(area[-1
][0]
, a[i]
)else
:# 比上乙個區間的最大值小,開始尋找其合適的區間進行合併
maxvalue = area[-1
][1]
while area:
temp = area.pop(-1
)if a[i]
>= temp[0]
:[temp[0]
, maxvalue]
)break
iflen
(area)==0
:[a[i]
, maxvalue]
)print
(area)
return
len(area)
if __name__ ==
'__main__'
: a =[2
,1,3
,2,4
,7,6
,2] n =
len(a)
print
(maxgroup(n, a)
)
2019京東校招筆試題 合唱隊形
合唱隊的n名學生站成一排且從左到右編號為1到n nn,其中編號為i的學生身高為h ih i hi 現在將這些學生分為若干組 同一組的學生編號連續 並且讓每組學生從左到右按照身高從低到高排序,使得最後所有學生同樣滿足從左到右身高從低到高 中間位置可以相等 那麼最多能將這些學生分成多少組呢?利用輔助空間...
校招筆試題2019(京東) 合唱隊形
合唱隊的n名學生站成一排且從左到右編號為1到n,其中編號為i的學生身高為hi。現在將這些學生分成若干組 同一組的學生編號連續 並讓每組學生從左到右按身高從低到高進行排序,使得最後所有學生同樣滿足從左到右身高從低到高 中間位置可以等高 那麼最多能將這些學生分成多少組?輸入 第一行包含乙個整數n,1 n...
華為筆試題 合唱隊
計算最少出列多少位同學,使得剩下的同學排成合唱隊形 說明 n位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的k位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2 k,他們的身高分別為t1,t2,tk,則他們的身高滿足存在i 1 i k 使得t1ti 1 ...