python 馬戲團人塔

2021-10-10 22:07:19 字數 1780 閱讀 4127

有個馬戲團正在設計疊羅漢的表演節目,乙個人要站在另一人的肩膀上。出於實際和美觀的考慮,在上面的人要比下面的人矮一點且輕一點。已知馬戲團每個人的身高和體重,請編寫**計算疊羅漢最多能疊幾個人。

示例:輸入:height =[65

,70,56

,75,60

,68] weight =

[100

,150,90

,190,95

,110

]輸出:6

解釋:從上往下數,疊羅漢最多能疊 6 層:(56,

90),(

60,95)

,(65,

100),(

68,110),(

70,150),(

75,190)

height.length == weight.length <=

10000

一、二分法

身高按公升序排序,體重按降序排序。

dp陣列表示乙個體重遞增的序列,對於當前掃瞄元素i來講,如果i的體重比dp序列末尾的體重還大,那麼直接放到序列的末尾(效果就是使序列變長),否則,就用元素i去替換序列中已有的元素。

class

solution

:def

bestseqatindex

(self, height: list[

int]

, weight: list[

int])-

>

int:

llen =

len(height)

person =

for i in

range

(llen)

:[height[i]

, weight[i]])

person.sort(key =

lambda x:

(x[0],

-x[1])

) dp =[0

]* llen

ans =

0for per in person:

i, j =

0, ans

while i != j:

mid =

(i+j)//2

if dp[mid]

< per[1]

: i = mid+

1else

: j = mid

dp[i]

= per[1]

if i == ans:

ans +=

1return ans

使用二分法模組

import bisect

class

solution

:def

bestseqatindex

(self, height: list[

int]

, weight: list[

int])-

>

int:

dp=for a,b in

sorted

(zip

(height,weight)

,key =

lambda x:

[x[0],

-x[1]]

):pos = bisect.bisect_left(dp,b)

dp[pos:pos+1]

=[b]

return

len(dp)

演算法 馬戲團人塔

有個馬戲團正在設計疊羅漢的表演節目,乙個人要站在另一人的肩膀上。出於實際和美觀的考慮,在上面的人要比下面的人矮一點且輕一點。已知馬戲團每個人的身高和體重,請編寫 計算疊羅漢最多能疊幾個人。leetcode 解題思路 首先根據身高將陣列順序排列,然後將身高相同的根據體重順序排列。這樣就是求乙個二維的最...

筆試題 馬戲團(搜狐)

輸入描述 首先乙個正整數n,表示人員個數。之後n行,每行三個數,分別對應馬戲團員編號,體重和身高。輸出描述 正整數m,表示羅漢塔的高度。輸入例子 6 1 65 100 2 75 80 3 80 100 4 60 95 5 82 101 6 81 70 輸出例子 4 用乙個vector 存放員工資料。...

工作隨筆 關於馬戲團的故事

很久沒有到blog上寫幾筆了,最近 乙個欄目的新首頁測試上線,所以也得以稍微喘口氣.晚上和乙個朋友聊天,不知道怎麼把話題引到了職涯上.個人感覺,像我這種工作了幾年,而且又跳過槽的人,大多朦朦朧朧的開始對工作有點感悟了.這半年來,由於單位需要招人,也有機會成為 考官 陸陸續續的面試一些應聘者.有剛畢業...