京東2020校招筆試題 合唱隊分組

2021-09-26 11:02:51 字數 1492 閱讀 2031

合唱隊的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 ...